为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测 QInputDialog 中值的变化?

如何检测 QInputDialog 中值的变化?

波斯汪 2021-11-02 15:12:04
我想在更改getInt方法调用的对话框的值时打印该值QInputDialog。我运行下面的代码,但它不起作用:import sysfrom PyQt5.QtCore import Slotfrom 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)
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

像这样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))


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信