запустить окно PyQT из основного окна PyQt и получить ввод пользователя? - PullRequest
3 голосов
/ 13 августа 2011

У меня есть главное окно 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 голосов
/ 13 августа 2011

Используйте

inputter.exec_()

вместо

inputter.show()

От: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html#exec

Этот метод также является слотом Qt с сигнатурой C ++ int exec ().

Показывает диалог как модальный диалог, блокируя, пока пользователь не закроет его. Функция возвращает результат DialogCode.

Если диалоговое окно является модальным приложения, пользователи не могут взаимодействовать с любым другое окно в том же приложении, пока они не закроют диалог. Если диалог модальный, только взаимодействие с родительским окном заблокирован, пока диалог открыт. По умолчанию диалоговое окно модальное приложение.

См. Также open (), show (), result () и setWindowModality ().

2 голосов
/ 16 августа 2011

Я знаю, что ответ утдемира решил вашу проблему, но я просто хотел сказать, что Qt поставляется с несколькими удобными диалоговыми окнами ввода. Например, QInputDialog.getText .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...