2014-08-29 24 views
1

如何修改下面定製的QMessageBox的代碼,以便知道用戶是否單擊了「是」或「否」?如何從定製的QMessageBox捕獲按鈕點擊?

from PySide import QtGui, QtCore 

# Create a somewhat regular QMessageBox 
msgBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, "My title", "My text.", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) 

# Get the layout 
question_layout = msgBox.layout() 

# Additional widgets to add to the QMessageBox 
qlabel_workspace_project = QtGui.QLabel('Some random data window:') 
qtextedit_workspace_project = QtGui.QTextEdit() 
qtextedit_workspace_project.setReadOnly(True) 

# Add the new widgets 
question_layout.addWidget(qlabel_workspace_project,question_layout.rowCount(), 0, 1, question_layout.columnCount()) 
question_layout.addWidget(qtextedit_workspace_project,question_layout.rowCount(), 0, 1, question_layout.columnCount()) 

# Show widget 
msgBox.show() 

回答

6

相反的show你應該只是使用exec_方法,從QDialog繼承所有部件有:

http://doc.qt.io/qt-4.8/qmessagebox.html#exec

此方法一直阻塞MSGBOX關閉並返回結果:

result = msgBox.exec_() 
if result == QtGui.QMessageBox.Yes: 
    # do yes-action 
else: 
    # do no-action 
1

你想要msgBox.exec_(),即運行它作爲對話。該呼叫的返回值等於按下的按鈕,與QtGui.QMessageBox.YesQtGui.QMessageBox.No進行比較。或者,如果您不想以模態方式運行此模式,但要麼定期進行回調或輪詢消息框,以下內容將返回被點擊的按鈕(或者如果沒有點擊任何內容,則返回None)或者0該消息框而不點擊按鈕被關閉):

msgBox.clickedButton() 

注意它返回按鈕實例,你就必須弄清楚自己哪個按鈕是。

buttonClicked()信號做了類似的事情。