我有一个主要的PyQt窗口,当我们点击某个按钮时,我需要从中获取一串用户输入。
以下是我的用户输入窗口代码:
class InputDialog(QtGui.QDialog):
'''
this is for when you need to get some user input text
'''
def __init__(self, parent=None, title='user input', label='comment', text=''):
QtGui.QWidget.__init__(self, parent)
#--Layout Stuff---------------------------#
mainLayout = QtGui.QVBoxLayout()
layout = QtGui.QHBoxLayout()
self.label = QtGui.QLabel()
self.label.setText(label)
layout.addWidget(self.label)
self.text = QtGui.QLineEdit(text)
layout.addWidget(self.text)
mainLayout.addLayout(layout)
#--The Button------------------------------#
layout = QtGui.QHBoxLayout()
button = QtGui.QPushButton("okay") #string or icon
self.connect(button, QtCore.SIGNAL("clicked()"), self.close)
layout.addWidget(button)
mainLayout.addLayout(layout)
self.setLayout(mainLayout)
self.resize(400, 60)
self.setWindowTitle(title)
从主窗口,我说:
inputter = InputDialog(mainWindowUI, title="comments", label="comments", text="")
inputter.show()
comment = inputter.text.text()
print comment
即使用户键入注释并点击“确定”,也会打印一个空字符串。显然是因为主窗口脚本不等待InputDialog
关闭。那么,我该如何让它等待,以便我可以检索用户输入?
答案 0 :(得分:5)
使用
inputter.exec_()
而不是
inputter.show()
来自:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html#exec
此方法也是带有C ++签名int exec()的Qt槽。
将对话框显示为模式对话框,直到用户关闭它为止。 该函数返回DialogCode结果。
如果对话框是应用程序模式,则用户无法与任何对象进行交互 同一应用程序中的其他窗口,直到它们关闭对话框。如果 对话框是窗口模态,只与父窗口交互 对话框打开时被阻止。默认情况下,对话框是 申请模式。
另请参见open(),show(),result()和setWindowModality()。
答案 1 :(得分:2)
我知道utdemir的回答解决了你的问题,但我只想说Qt附带了几个便利输入对话框。例如,请查看QInputDialog.getText。