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

2024-05-15 21:45:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主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关闭。那么,如何让它等待,以便检索用户输入?


Tags: text用户selfinputtitlecommentbuttonlabel
2条回答

使用

inputter.exec_()

而不是

inputter.show()

发件人:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html#exec

This method is also a Qt slot with the C++ signature int exec().

Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.

If the dialog is application modal, users cannot interact with any other window in the same application until they close the dialog. If the dialog is window modal, only interaction with the parent window is blocked while the dialog is open. By default, the dialog is application modal.

See also open(), show(), result(), and setWindowModality().

我知道utdemir的响应解决了您的问题,但我只想说Qt附带了几个方便的输入对话框。例如,看看QInputDialog.getText

相关问题 更多 >