QMessageBox添加自定义按钮并保持打开状态

Dre*_*ees 1 python pyqt python-3.x qmessagebox pyqt5

我想向 QMessagebox 添加一个自定义按钮,用于打开 matplotlib 窗口,以及一个“确定”按钮,供用户在想要关闭它时单击

我目前已经可以正常工作了,但我希望这两个按钮能够执行单独的操作而不是打开窗口。

我知道我可以创建一个具有所需结果的对话框窗口,但我想知道如何使用 QMessageBox。

import sys
from PyQt5 import QtCore, QtWidgets

def main():
    app = QtWidgets.QApplication(sys.argv)
    msgbox = QtWidgets.QMessageBox()
    msgbox.setWindowTitle("Information")
    msgbox.setText('Test')
    msgbox.addButton(QtWidgets.QMessageBox.Ok)
    msgbox.addButton('View Graphs', QtWidgets.QMessageBox.YesRole)

    bttn = msgbox.exec_()

    if bttn:
        print("Ok")
    else:
        print("View Graphs")
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

期望的结果:

确定按钮 - 关闭 QMessageBox

“查看图形”按钮 - 打开 matplotlib 窗口并保持 QMessageBox 打开,直到用户单击“确定”

Hei*_*ike 5

在我看来有点老套,但是在添加View Graphs按钮后,您可以断开其clicked信号并将其重新连接到您选择的插槽,例如

import sys
from PyQt5 import QtCore, QtWidgets

def show_graph():
    print('Show Graph')

def main():
    app = QtWidgets.QApplication(sys.argv)
    msgbox = QtWidgets.QMessageBox()
    msgbox.setWindowTitle("Information")
    msgbox.setText('Test')
    msgbox.addButton(QtWidgets.QMessageBox.Ok)

    yes_button = msgbox.addButton('View Graphs', QtWidgets.QMessageBox.YesRole)
    yes_button.clicked.disconnect()
    yes_button.clicked.connect(show_graph)

    bttn = msgbox.exec_()

    if bttn:
        print("Ok")
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)