猿问

如何检测 QInputDialog 中值的变化?

我想在更改getInt方法调用的对话框的值时打印该值QInputDialog。


我运行下面的代码,但它不起作用:


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)


波斯汪
浏览 133回答 1
1回答

一只萌萌小番薯

像这样getInt的函数是静态的,这意味着它们创建了一个QInputDialog不能从代码直接访问的内部实例。如果您创建自己的 实例QInputDialog,则必须自己进行所有初始化,然后调用exec()(就像普通对话框一样)。正如QInputDialog的文档所示,这种方法比使用静态函数更灵活,因为它提供了更多的自定义范围。大致等效的实现getInt是:import sysfrom PyQt5.QtWidgets import QApplication, QInputDialogdef 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(), acceptedprint(getInt(None, 'Title', 'Type Value', 5))# print(QInputDialog.getInt(None, 'title', 'Type Value', 5))
随时随地看视频慕课网APP

相关分类

Python
我要回答