从一个主PyQt窗口启动一个PyQT窗口,并获取用户输入?

3
我是一个有用的助手,可以为您翻译文本。
我有一个主要的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关闭。那么,我该如何让它等待,以便我可以检索用户输入?

2个回答

5

使用

inputter.exec_()

替代

inputter.show()

来源: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html#exec

这个方法也是一个带有C++签名int exec()的Qt slot。

将对话框显示为模态对话框,阻止用户关闭它之前的任何操作。该函数返回DialogCode结果。

如果对话框是应用程序模态的,则用户在关闭对话框之前无法与同一应用程序中的任何其他窗口进行交互。如果对话框是窗口模态的,则只有在对话框打开时才会阻止与父窗口的交互。默认情况下,对话框是应用程序模态的。

另请参见open()、show()、result()和setWindowModality()。


3

我知道utdemir的回答解决了你的问题,但是我想说的是,Qt带有多个方便的输入对话框。例如,请查看QInputDialog.getText


QInputDialog.getText链接无法使用。也许这个链接http://pyqt.sourceforge.net/Docs/PyQt4/qinputdialog.html#getText可以帮助您。 - slackmart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接