sys.argvを使用してコマンドラインで入力フラグを使用する代わりに、Pythonプログラムを変更して、ダイアログボックスを持つGUIでユーザーがいくつかの質問に対する回答を提供できるようにします。 "適用"ボタンが押された後、私はダイアログGUIを消してから、ダイアログボックスで提供される変数で正常に動作するようにします。私はQtGuiを使っていろいろな方法で試しました。クラッシュするか、メインプログラムの答えがわかりません。私は私の多くの試みの一つを以下に示します。この例では、適用ボタンが押された後の答えは分かりません。出力は、私は非常に多くの変数「A1」がダイアログボックスで指定した文字列で満たされているように、このコードを変更する方法について助けいただければ幸いですQtGuiをPyQt4で使用して、Pythonプログラムに入力変数を収集する方法はありますか?
after widget answer1 = <blank no matter what I write in the dialog box>
です。 ありがとうございました!
import sys
from PyQt4 import QtGui
class Widget(QtGui.QWidget):
def __init__(self):
super(Widget, self).__init__()
self.answer1 = QtGui.QLabel()
q1Edit = QtGui.QLineEdit()
q1Edit.textChanged[str].connect(self.q1Changed)
grid = QtGui.QGridLayout()
grid.setSpacing(20)
grid.addWidget(QtGui.QLabel('Question 1'), 1, 0)
grid.addWidget(q1Edit, 1, 1)
grid.addWidget(self.answer1, 1, 2)
applyBtn = QtGui.QPushButton('Apply', self)
applyBtn.clicked.connect(self.close)
self.answer1Text = self.answer1.text()
grid.addWidget(applyBtn,4,3)
self.setLayout(grid)
self.setGeometry(300, 300, 350, 300)
self.show()
def q1Changed(self, text):
self.answer1.setText(text)
def returnAnswer1(self):
return self.answer1Text
def main():
app = QtGui.QApplication(sys.argv)
w = Widget()
a1 = w.returnAnswer1()
print("after widget answer1 = " + a1)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
JRazorのおかげで、これは終わりで解決した:
import sys
from PyQt4 import QtGui
class Widget(QtGui.QDialog):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.answer1 = QtGui.QLabel()
q1Edit = QtGui.QLineEdit()
q1Edit.textChanged.connect(self.q1Changed)
self.answer2 = QtGui.QLabel()
q2Edit = QtGui.QLineEdit()
q2Edit.textChanged.connect(self.q2Changed)
grid = QtGui.QGridLayout()
grid.setSpacing(20)
grid.addWidget(QtGui.QLabel('Question 1'), 1, 0)
grid.addWidget(q1Edit, 1, 1)
grid.addWidget(QtGui.QLabel('Question 2'), 2, 0)
grid.addWidget(q2Edit, 2, 1)
applyBtn = QtGui.QPushButton('Apply', self)
applyBtn.clicked.connect(self.close)
grid.addWidget(applyBtn,3,2)
self.setLayout(grid)
self.setGeometry(300, 300, 350, 300)
def q1Changed(self, text):
self.answer1.setText(text)
def q2Changed(self, text):
self.answer2.setText(text)
def returnAnswer1(self):
return self.answer1.text()
def returnAnswer2(self):
return self.answer2.text()
@staticmethod
def getData(parent=None):
dialog = Widget(parent)
dialog.exec_()
return [dialog.returnAnswer1(), dialog.returnAnswer2()]
def main():
app = QtGui.QApplication([])
window = Widget()
data = window.getData()
print data[0]
print data[1]
if __name__ == '__main__':
main()
こんにちはJRazor、ここで手伝ってくれてありがとう多くのことを...私は 'あなた'ウィンドウ= Widget.getData() 'の後が、編集で何かを書き込んだ後、'プリント(ウィンドウ)を追加しましたフィールドを適用して、Applyボタンを押すと、何が間違っているのか分かりませんか? – chan
@chan:答えが更新されました(完全なコードも)。 – JRazor
素晴らしい作品です!しかし、同じダイアログボックスに複数の質問を表示しようとすると、ダイアログボックスが2回開きます。どのようにそれを解決するための任意のアイデア?あなたの[github](https://gist.github.com/gitex/83b06e8ceaac18ad5dec2d332ed6cbaa) – chan