pyqt5 关闭按钮显示提示信息

pyqt默认创建的程序是点击右上角关闭按钮直接关闭软件的,所以我们如果想要在点击关闭按钮时显示提示信息或者其他操作,就需要重写这个closeEvent方法。

首先新建一个类,类名随意取一个就好,这里用Dialog就行了吧,继承下QtWidgets.QMainWindow这个类。

class Dialog(QtWidgets.QMainWindow):

然后重写下这个closeEvent方法,重写这个方法有两种写法,一种可以随意添加或者命名按钮,一种比较简单,直接显示yes 或者 no,

方法一预览:

方法二预览:

方法一的代码:

def closeEvent(self, event):
        reply = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Question, self.tr("提示"), self.tr("汝妻子我养之,汝勿虑之。\n 汝特么确定要退出吗?"), QtWidgets.QMessageBox.NoButton, self)
        yr_btn = reply.addButton(self.tr("是的我要退出"), QtWidgets.QMessageBox.YesRole)
        reply.addButton(self.tr("最小化到托盘"), QtWidgets.QMessageBox.NoRole)
        reply.exec_()
        if reply.clickedButton() == yr_btn:
            event.accept()
            QtWidgets.qApp.quit()
            # sys.exit(app.exec_())
        else:
            event.ignore()
            # 最小化到托盘
            

方法二的代码:

def closeEvent(self, event):
    # 默认直接调用QMessageBox.question 弹出询问的方法
        reply = QtWidgets.QMessageBox.question(self,
                                               '本程序',
                                               "是否要退出程序?",
                                               QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
        elif reply == QtWidgets.QMessageBox.No:
            event.ignore()
            MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
            MainWindow.showMinimized()
        else:
            # 最小化到托盘
            MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
            MainWindow.showMinimized()

需要注意的是方法一中最小化到托盘其实并不能用,这段代码是我从一大段程序中摘出来的,点击最小化到托盘其实功能和方法二中的no效果是一样的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用QTimer来实现QMessageBox自动关闭的功能。具体步骤如下: 1. 创建一个QMessageBox对象,并设置好需要显示信息按钮。 2. 创建一个QTimer对象,并设置好定时器的时间间隔。 3. 将QMessageBox的exec()方法放在QTimer的单次定时器超时信号中。 4. 启动QTimer。 示例代码如下: ``` import sys from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtCore import QTimer app = QApplication(sys.argv) # 创建QMessageBox对象 msg_box = QMessageBox() msg_box.setWindowTitle("提示") msg_box.setText("这是一条提示信息!") msg_box.setStandardButtons(QMessageBox.Ok) # 创建QTimer对象 timer = QTimer() # 将QMessageBox的exec()方法放在QTimer的单次定时器超时信号中 timer.timeout.connect(msg_box.exec_) # 设置定时器时间间隔为3秒 timer.start(3000) # 显示QMessageBox msg_box.show() sys.exit(app.exec_()) ``` 运行以上代码,可以看到QMessageBox会在3秒后自动关闭。 ### 回答2: PyQt是一个Python编程语言的GUI框架,其中包含了许多功能强大的UI控件,包括消息框(QMessageBox)。消息框提供了一种方便的方式,用于显示简单的信息和与用户进行交互。 在PyQt中,QMessageBox具有许多功能,其中之一是自动关闭。这意味着,消息框将在用户确认对话框上的信息后自动关闭。可以通过在QMessageBox中调用setAutoClose()方法来启用此功能。 以下是一个示例代码,演示如何在PyQt程序中使用自动关闭的QMessageBox: ``` from PyQt5.QtWidgets import QApplication, QMessageBox import sys app = QApplication(sys.argv) messageBox = QMessageBox() messageBox.setText("Hello, World!") messageBox.setIcon(QMessageBox.Information) messageBox.setAutoClose(True) messageBox.show() sys.exit(app.exec_()) ``` 在此示例中,我们创建了一个QMessageBox实例,并将其设置为文本“Hello, World!”和一个信息图标。我们还使用setAutoClose()方法启用了自动关闭功能。最后,我们使用show()方法显示消息框。 当用户单击消息框上的确认按钮时,消息框将自动关闭。此功能可以提高用户体验并使代码更加简洁。如果您需要更多自定义选项,请查阅PyQt文档以了解如何进一步配置消息框的行为。 总之,通过使用PyQt中的QMessageBox自动关闭功能,您可以在您的应用程序中轻松管理用户交互,并提高用户体验。 ### 回答3: PyQt是一种基于Python的GUI图形用户界面库,它提供了丰富的控件和便于开发的API和工具,使得开发者可以更加便捷地创建功能强大的GUI应用程序。 QMessageBox是PyQt里面的一个常用控件,它提供了一个简单的弹窗对话框来向用户显示相关的消息。在使用QMessageBox时,我们可以通过调用它的静态函数来创建一个弹窗对话框,例如: QMessageBox.information(None, 'Title', 'Message', QMessageBox.Yes) 其中,'None'参数指的是对话框的父级,'Title'参数是对话框的标题,'Message'参数是要显示的消息,'QMessageBox.Yes'用于指定对话框内显示按钮类型。 如果我们需要让QMessageBox对话框自动关闭,可以通过使用QTimer定时器来实现。例如: ```python import sys from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtCore import QTimer app = QApplication(sys.argv) message_box = QMessageBox() message_box.setWindowTitle("Title") message_box.setText("Message") message_box.setIcon(QMessageBox.Information) message_box.setStandardButtons(QMessageBox.Ok) timer = QTimer() timer.singleShot(5000, message_box.accept) #这里设置了5秒自动关闭 message_box.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们首先创建了一个QMessageBox实例,然后通过调用各个方法来设置对话框的标题、消息、图标和按钮。 然后,我们使用QTimer定时器来设置对话框的关闭时间,这里我们使用了singleShot函数,它可以让定时器只执行一次回调函数,这里我们将QMessageBox的accept方法作为回调函数。 最后,我们通过调用show()方法来显示对话框,然后调用app.exec_()进入Qt的事件循环,等待用户的操作或者其他事件的触发。 这样,当用户打开对话框后,它会在5秒左右自动关闭,提高了用户体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值