pyqt6实现关闭窗口前弹出确认框的示例代码

 更新时间:2024年02月19日 11:41:48   作者:老狼IT工作室  
本文主要介绍了pyqt6实现关闭窗口前弹出确认框的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

功能描述

关闭右上角的关闭(×)按钮时,弹出确认框,选择“是(Yes)”则直接退出窗口,选择“(否)No”则忽视当前操作,保留窗口处于激活状态。

知识点

QMessageBox.question方法

QMessageBox.question() 方法是 PyQt 中用于显示一个带有确定和取消按钮的对话框,并等待用户点击其中一个按钮后返回结果的方法。

函数原型:

QMessageBox.question(parent: Optional[QWidget], 
	title: Optional[str], 
	text: Optional[str], 
	buttons: QMessageBox.StandardButton = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), 
	defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) 
-> QMessageBox.StandardButton

参数说明:

  • parent:父窗口对象,即该对话框的父级窗口。如果为 None,则对话框没有父级窗口。
  • title:对话框的标题。
  • text:对话框中要显示的文本内容。
  • buttons:对话框中要显示的按钮类型,可以是以下值的组合:
    • Yes和No
    • Yes和Cancel
  • defaultButton:对话框中默认选中的按钮(来自buttons之一)

返回值为选中的按钮(来自buttons之一)

class StandardButton(enum.IntFlag):
    NoButton = ... # type: QMessageBox.StandardButton
    Ok = ... # type: QMessageBox.StandardButton
    Save = ... # type: QMessageBox.StandardButton
    SaveAll = ... # type: QMessageBox.StandardButton
    Open = ... # type: QMessageBox.StandardButton
    Yes = ... # type: QMessageBox.StandardButton
    YesToAll = ... # type: QMessageBox.StandardButton
    No = ... # type: QMessageBox.StandardButton
    NoToAll = ... # type: QMessageBox.StandardButton
    Abort = ... # type: QMessageBox.StandardButton
    Retry = ... # type: QMessageBox.StandardButton
    Ignore = ... # type: QMessageBox.StandardButton
    Close = ... # type: QMessageBox.StandardButton
    Cancel = ... # type: QMessageBox.StandardButton
    Discard = ... # type: QMessageBox.StandardButton
    Help = ... # type: QMessageBox.StandardButton
    Apply = ... # type: QMessageBox.StandardButton
    Reset = ... # type: QMessageBox.StandardButton
    RestoreDefaults = ... # type: QMessageBox.StandardButton
    FirstButton = ... # type: QMessageBox.StandardButton
    LastButton = ... # type: QMessageBox.StandardButton
    YesAll = ... # type: QMessageBox.StandardButton
    NoAll = ... # type: QMessageBox.StandardButton
    Default = ... # type: QMessageBox.StandardButton
    Escape = ... # type: QMessageBox.StandardButton
    FlagMask = ... # type: QMessageBox.StandardButton
    ButtonMask = ... # type: QMessageBox.StandardButton

QWidget.closeEvent方法

QWidget.closeEvent() 是一个在窗口关闭时自动调用的函数,用于处理窗口关闭事件。当用户点击窗口的关闭按钮或使用操作系统提供的快捷键来关闭窗口时,该函数就会被触发。

函数原型如下:

def closeEvent(self, event):
    """
    处理窗口关闭事件。

    参数:
        event (QCloseEvent) -- 关闭事件对象,包含了与关闭事件相关的信息。

    返回值:
        无返回值。如果需要阻止窗口关闭,可以返回 True;否则返回 False。
    """

在 closeEvent() 函数中,我们可以编写自定义的代码来处理窗口关闭事件。例如,我们可以在函数中弹出一个确认对话框,询问用户是否真的要关闭窗口。如果用户选择“是”,则允许窗口关闭;如果用户选择“否”,则取消关闭操作。

实现代码

import sys

from PyQt6.QtGui import QCloseEvent
from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox


class ConfirmQuitWindow(QWidget):
    def __init__(self, is_confirm_quit: bool = True):
        super(ConfirmQuitWindow, self).__init__()
        self.is_confirm_quit = is_confirm_quit
        self.setGeometry(0, 0, 500, 300)
        self.setWindowTitle('提示是否关闭窗口测试')

    def closeEvent(self, event: QCloseEvent) -> None:
        if self.is_confirm_quit:
            reply = QMessageBox.question(self, '关闭窗口', '确定退出吗?',
                                         QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
                                         QMessageBox.StandardButton.No)
            if reply == QMessageBox.StandardButton.Yes:
                event.accept()
            else:
                event.ignore()
        else:
            event.accept()


app = QApplication(sys.argv)

window = ConfirmQuitWindow(is_confirm_quit=True)
window.show()

sys.exit(app.exec())

 运行效果

点击右上角关闭(x)按钮:

如果选择 No,窗口不关闭。如果选择 “Yes”,则窗口关闭。

到此这篇关于pyqt6实现关闭窗口前弹出确认框的示例代码的文章就介绍到这了,更多相关pyqt6  弹出确认框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • DJANGO-ALLAUTH社交用户系统的安装配置

    DJANGO-ALLAUTH社交用户系统的安装配置

    django-allauth是集成了local用户系统和social用户系统,其social用户系统可以挂载多个账户。也是一个流行度非常高的Django user系统,我们这里简单介绍下,分享下个人的使用经验
    2014-11-11
  • Python元组Tuple常用函数详解

    Python元组Tuple常用函数详解

    Python元组Tuple使用小括号()包裹,元素之间使用逗号,间隔,元组与列表相似,但元组的元素不可变,本文就给大家详细介绍一下元组的常用函数以及基本操作,感兴趣的朋友可以参考阅读下
    2023-07-07
  • Pytorch之如何提取模型中的某一层

    Pytorch之如何提取模型中的某一层

    这篇文章主要介绍了Pytorch之如何提取模型中的某一层问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python的Flask路由实现实例代码

    Python的Flask路由实现实例代码

    这篇文章主要介绍了Python的Flask路由实现实例代码,在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法,需要的朋友可以参考下
    2023-08-08
  • 老生常谈python函数参数的区别(必看篇)

    老生常谈python函数参数的区别(必看篇)

    下面小编就为大家带来一篇老生常谈python函数参数的区别(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • pycharm出现No pyvenv.cfg file错误的问题解决

    pycharm出现No pyvenv.cfg file错误的问题解决

    本文主要介绍了pycharm出现No pyvenv.cfg file错误的问题解决,主要是通过恢复历史记录中的未删除状态来解决,下面就来详细的介绍一下,感兴趣的可以了解一下
    2025-05-05
  • Python基础之输入input与输出print函数详解

    Python基础之输入input与输出print函数详解

    这篇文章主要带大家深入理解输入input与输出print函数详解的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践,需要的朋友可以参考下
    2026-04-04
  • Python自动抢红包教程详解

    Python自动抢红包教程详解

    在本篇文章里小编给大家整理了关于Python自动抢红包的相关知识点内容,有兴趣的朋友们参考学习下。
    2019-06-06
  • python使用wmi模块获取windows下硬盘信息的方法

    python使用wmi模块获取windows下硬盘信息的方法

    这篇文章主要介绍了python使用wmi模块获取windows下硬盘信息的方法,涉及Python获取系统硬件信息的相关技巧,需要的朋友可以参考下
    2015-05-05
  • django admin 自定义替换change页面模板的方法

    django admin 自定义替换change页面模板的方法

    今天小编就为大家分享一篇django admin 自定义替换change页面模板的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论