2016-05-13 558 views
1

该代码创建一个带有单个QPushButtonQDialog窗口。单击该按钮将弹出带有三个按钮的QMessageBox窗口。有没有办法重新排列按钮顺序?如何更改QMessageBox中的按钮顺序

enter image description here

from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 

class Dialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Dialog, self).__init__(parent) 

     self.resize(300, 100) 
     self.setLayout(QtGui.QVBoxLayout()) 

     button = QtGui.QPushButton('Submit') 
     button.clicked.connect(self.onclick) 
     self.layout().addWidget(button) 

    def onclick(self): 
     self.close() 
     messagebox = QtGui.QMessageBox(QtGui.QMessageBox.Warning, "Title text", "body text", buttons = QtGui.QMessageBox.Ok | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel, parent=self) 
     messagebox.setDefaultButton(QtGui.QMessageBox.No) 
     exe = messagebox.exec_() 
     print exe 

dialog = Dialog() 
dialog.show() 
app.exec_() 

回答

2

QMessageBox.addButton()过载可用于按钮排序。默认排序因平台而异。调用exec()后,使用QMessageBox.clickedButton()查询使用了哪个按钮。

enter image description here

from PyQt4 import QtGui, QtCore 
import sys 
app = QtGui.QApplication([]) 

class Dialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Dialog, self).__init__(parent) 

     self.resize(300, 100) 
     self.setLayout(QtGui.QVBoxLayout()) 

     button = QtGui.QPushButton('Submit') 
     button.clicked.connect(self.onclick) 
     self.layout().addWidget(button) 

    def onclick(self): 
     self.close() 
     message = "<font size = 5 color = gray > Rich Html Title </font> <br/><br/>The clickable link <a href='http://www.google.com'>Google.</a> The lower and upper case text." 
     messagebox = QtGui.QMessageBox(QtGui.QMessageBox.Warning, "title", message, parent=self) 
     messagebox.addButton("ResetRole Left Most", QtGui.QMessageBox.ResetRole) 
     messagebox.addButton("ApplyRole Left", QtGui.QMessageBox.ApplyRole) 
     messagebox.addButton("RejectRole Right", QtGui.QMessageBox.RejectRole) 
     messagebox.addButton("NoRole Right Most", QtGui.QMessageBox.NoRole) 
     exe = messagebox.exec_() 
     print 'exe: %s clickedButton: %s'%(exe, messagebox.clickedButton()) 

dialog = Dialog() 
dialog.show()  
app.exec_() 
+0

任何人都知道是怎么回事与OSX按钮文本填充?它不居中。 – eephillip