2011-08-12 110 views
3

我有一個主要的PyQt窗口,從中我需要得到一個用戶輸入的字符串,當他們擊中某個按鈕。從主PyQt窗口啓動一個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上等待關閉。那麼,如何讓它等待,以便我可以檢索用戶輸入?

回答

5

使用

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()。

+1

這很有效!輝煌,謝謝! –

2

我知道utdemir的迴應解決了您的問題,但我只是想說,Qt帶有幾個便利輸入對話框。例如,看看QInputDialog.getText

+0

QInputDialog.getText鏈接不起作用。也許這一個http://pyqt.sourceforge.net/Docs/PyQt4/qinputdialog.html#getText可以幫助。 – slackmart