問題

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の独自のインスタンスを作成する場合は、すべての初期化を自分で行い、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))
 

  同じタグがついた質問を見る

pythonpyqtpyqt5qinputdialog