【问题标题】:How to change the buttons order in QMessageBox如何更改 QMessageBox 中的按钮顺序
【发布时间】:2016-05-13 20:52:21
【问题描述】:

代码创建一个带有单个QPushButtonQDialog 窗口。单击该按钮将打开带有三个按钮的QMessageBox 窗口。有没有办法重新排列按钮顺序?

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

【问题讨论】:

    标签: python qt pyqt qmessagebox


    【解决方案1】:

    QMessageBox.addButton() 重载可用于按钮排序。默认顺序因平台而异。调用 exec() 后使用QMessageBox.clickedButton() 查询使用了什么按钮。

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

    【讨论】:

    • 有人知道 osx 上的按钮文本填充是怎么回事吗?它没有居中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多