Как я могу обнаружить изменение значения в QInputDialog? - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу напечатать значение при изменении значения диалогового окна, вызванного методом 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)

1 Ответ

0 голосов
/ 08 февраля 2019

Функции типа 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))
...