如何检测 QInputDialog 中值的变化?
How can I detect the change of value in a QInputDialog?
我想在更改由 QInputDialog
的 getInt
方法调用的对话框的值时打印该值。
我运行下面的代码,但它不起作用:
import sys
from PyQt5.QtCore import Slot
from PyQt5.QtWidgets import QApplication, QInputDialog
@Slot(int)
def int_value_changed(val):
print(val)
if 'qapp' not in globals():
qapp = QApplication(sys.argv)
dlg = QInputDialog(None)
dlg.intValueChanged.connect(int_value_changed)
dlg.getInt(None, 'title', 'Type Value', 0)
像 getInt
这样的函数是静态的,这意味着它们创建了 QInputDialog
的内部实例,不能直接从代码访问。如果您创建自己的 QInputDialog
实例,则必须自己完成所有初始化,然后调用 exec()
(就像普通对话框一样)。正如 QInputDialog 的文档所示,这种方法比使用静态函数更灵活,因为它提供了更多的自定义范围。
getInt
的大致等效实现是:
import sys
from PyQt5.QtWidgets import QApplication, QInputDialog
def int_value_changed(val):
print(val)
if QApplication.instance() is None:
qapp = QApplication(sys.argv)
def getInt(parent, title, label, value=0):
dlg = QInputDialog(parent)
dlg.setInputMode(QInputDialog.IntInput)
dlg.setWindowTitle(title)
dlg.setLabelText(label)
dlg.setIntValue(value)
dlg.intValueChanged.connect(int_value_changed)
accepted = dlg.exec_() == QInputDialog.Accepted
dlg.deleteLater()
return dlg.intValue(), accepted
print(getInt(None, 'Title', 'Type Value', 5))
# print(QInputDialog.getInt(None, 'title', 'Type Value', 5))
我想在更改由 QInputDialog
的 getInt
方法调用的对话框的值时打印该值。
我运行下面的代码,但它不起作用:
import sys
from PyQt5.QtCore import Slot
from PyQt5.QtWidgets import QApplication, QInputDialog
@Slot(int)
def int_value_changed(val):
print(val)
if 'qapp' not in globals():
qapp = QApplication(sys.argv)
dlg = QInputDialog(None)
dlg.intValueChanged.connect(int_value_changed)
dlg.getInt(None, 'title', 'Type Value', 0)
像 getInt
这样的函数是静态的,这意味着它们创建了 QInputDialog
的内部实例,不能直接从代码访问。如果您创建自己的 QInputDialog
实例,则必须自己完成所有初始化,然后调用 exec()
(就像普通对话框一样)。正如 QInputDialog 的文档所示,这种方法比使用静态函数更灵活,因为它提供了更多的自定义范围。
getInt
的大致等效实现是:
import sys
from PyQt5.QtWidgets import QApplication, QInputDialog
def int_value_changed(val):
print(val)
if QApplication.instance() is None:
qapp = QApplication(sys.argv)
def getInt(parent, title, label, value=0):
dlg = QInputDialog(parent)
dlg.setInputMode(QInputDialog.IntInput)
dlg.setWindowTitle(title)
dlg.setLabelText(label)
dlg.setIntValue(value)
dlg.intValueChanged.connect(int_value_changed)
accepted = dlg.exec_() == QInputDialog.Accepted
dlg.deleteLater()
return dlg.intValue(), accepted
print(getInt(None, 'Title', 'Type Value', 5))
# print(QInputDialog.getInt(None, 'title', 'Type Value', 5))