繁体   English   中英

如何在QInputDialog中检测值的变化?

[英]How can I detect the change of value in a QInputDialog?

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

我运行以下代码,但无法正常工作:

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实例, 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM