I have a main PyQt window, from which I need to get a string of User Input when they hit a certain button.
Here is my code for the User Input window:
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)
开发者_JAVA百科
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)
From the main window, I am saying:
inputter = InputDialog(mainWindowUI, title="comments", label="comments", text="")
inputter.show()
comment = inputter.text.text()
print comment
This prints an empty string, even if the user types a comment and hits "OK". Obviously because the main window script does not wait on the InputDialog
to close. So, how do I get it to wait, so that I may retrieve the user input?
Use
inputter.exec_()
instead of
inputter.show()
From: 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().
I know that utdemir's response solved your problem but I just wanted to say that Qt comes with several convenience input dialogs included. Have a look at QInputDialog.getText for instance.
精彩评论