【问题标题】:How can I detect the change of value in a QInputDialog?如何检测 QInputDialog 中值的变化?
【发布时间】:2019-02-08 01:20:23
【问题描述】:

我想在更改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)

【问题讨论】:

    标签: python pyqt pyqt5 qinputdialog


    【解决方案1】:

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2011-11-24
      • 1970-01-01
      • 2016-11-29
      • 2015-08-08
      • 2017-02-27
      相关资源
      最近更新 更多