#!/usr/bin/env python

 import sys
from PyQt5.QtWidgets import (QApplication,
QMainWindow,
QMessageBox)
from PyQt5.QtCore import Qt class Window(QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent, Qt.Window) self.status = self.statusBar()
self.init_ui() def init_ui(self):
# 在程序窗口显示之前弹出对话框:
message = QMessageBox()
# 对话框图标设置:
message.setIcon(QMessageBox.Information)
# 设置对话框标题:
message.setWindowTitle("开始")
# 设置对话框文本:
message.setText("软件运行。")
# 设置对话框信息文本:
message.setInformativeText("这是一个重写窗口事件的记录。")
# 显示对话框:
message.exec_() self.resize(500, 450)
# 窗口置顶:
self.setWindowFlag(Qt.WindowStaysOnTopHint)
self.show() def moveEvent(self, *args, **kwargs):
# 重写移动事件:
# 在状态栏显示窗口坐标
self.status.showMessage("窗口坐标: X = {0} | y = {1}".format(self.x(), self.y())) def resizeEvent(self, event):
# 重写改变窗口尺寸事件:
# 在状态栏显示窗口尺寸
self.status.showMessage("窗口尺寸:{0} × {1}".format(self.width(), self.height())) def closeEvent(self, event):
# 重写关闭事件,确认是否真的要关闭:
self.status.showMessage("关闭提醒")
message = QMessageBox()
# 置顶显示对话框:
message.setWindowFlag(Qt.WindowStaysOnTopHint)
message.setIcon(QMessageBox.Warning)
message.setText("真的要退出吗?")
# 自定义对话框按钮:
# 必须要指定按钮的 Role 属性,不能忘
message.addButton("是的,我要退出!", QMessageBox.AcceptRole)
msg_no = message.addButton("等等,我再想想!", QMessageBox.NoRole)
# 设置默认按钮:
message.setDefaultButton(msg_no)
# 接收按下对话框按钮的信息:
reply = message.exec_()
# 第一个按钮返回 0 ,第二个返回 1 ,以此类推:
if reply == 0:
# 确认,退出程序:
event.accept()
# 也可以通过按钮的 Role 属性判断
if reply == QMessageBox.NoRole:
# 取消,不退出程序:
event.ignore() if __name__ == "__main__":
app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())

程序运行时先弹出对话框:

点击 OK 按钮后出现主窗口:

点击关闭按钮时会出现确认对话框:

【PyQt5 学习记录】006:重写窗口事件及QMessageBox的更多相关文章

  1. Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)

    PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...

  2. 【PyQt5 学习记录】008:改变窗口样式之二

    super(MainWindow, self).__init__(parent, flags=Qt.Widget) 首先需要关闭窗口的默认样式,以方便定时想要的样式: self.setWindowFl ...

  3. 【PyQt5 学习记录】007:改变窗口样式之一

    class MainWindow(QMainWindow): 2 def __init__(self, parent=None): 3 super(MainWindow, self).__init__ ...

  4. 【PyQt5 学习记录】001:第一个界面

    PyQt5 的安装很简单: pip3 install PyQt5 然后就是写一个最简单的界面试试手: import sys from PyQt5.QtWidgets import QApplicati ...

  5. 【PyQt5 学习记录】010:QSplitter

    import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTextEdit, QPushButton, QL ...

  6. 【PyQt5 学习记录】005:QMainWindow 及状态栏、菜单栏和工具栏

    #!/usr/bin/env python import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QA ...

  7. 【PyQt5 学习记录】003:水平布局和获取屏幕尺寸

    #!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PySide2.QtWidgets import (QApplication, QW ...

  8. 【PyQt5 学习记录】011:使用 QListWidet 创建列表

    使用 QListWidet 创建列表 作者: 八月未见 博客: https://www.cnblogs.com/jmtm/ 创建列表: list_widget = QListWidget() 插入项目 ...

  9. 【PyQt5 学习记录】004:简单QThread笔记

    在文本编辑框中每隔几秒添加一行文本,代码如下: #!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets im ...

随机推荐

  1. php文件每隔几秒执行一次

    说实话,linux 下面的crontab 任务完全可以实现所有的定时任务脚本,但是有些脚本只需要在一段时间内执行,过了这段时间之后,就不再执行定时脚本了.在使用crontab的时候,就需要人为的关闭掉 ...

  2. day 34 js 基础后部分 BOM 和 事件和正则

    前情提要 今天主要学习的是bom 和事件 一:正则表达式 <!DOCTYPE html> <html lang="en"> <head> < ...

  3. Postman+Newman+Jenkins 详细教程

    详细步骤点击: https://note.youdao.com/web/#/file/WEBda9492a77807d8050b40f8315bf6554a/note/WEBde553e6dff6ff ...

  4. MySQL多实例(二)

    一.多实例MySQL数据库原理 1.1:原理图 1.2:多实例原理(什么是多实例) 简单来说MySQL多实例就是在一台服务器上同时开启多个不用的服务端口(如:3306.3307),同时运行多个MySQ ...

  5. AngularJS常用Directives实例

    在第一篇 认识AngularJS 中,我们已经基本了解了AngularJS,对Directive也有了一定了解,本章我们将继续介绍Directive,对其有一个更深入的了解和掌握. 常用的Direct ...

  6. Ubuntu 连接手机 不识别设备 -- 解决办法

    1.usb线连接手机,输入命令 $ lsusb Bus 004 Device 002: ID 8087:8000 Intel Corp. Bus 004 Device 001: ID 1d6b:000 ...

  7. [转] 在linux下使用Terminator

    Ubuntu自带的终端是gnome-terminal,虽然能用但是不能支持屏幕分割和选择复制等功能,于是换用terminator作为默认终端. 安装 sudo apt-get install term ...

  8. postman—post方式几种请求参数区别

    postman中 form-data.x-www-form-urlencoded.raw.binary的区别 版权声明参考: https://blog.csdn.net/wangjun5159/art ...

  9. predefClass中包含的符号

    Scope[ ||(boolean,boolean), &&(boolean,boolean), !=(int,int), !=(long,long), !=(float,float) ...

  10. 微服务Kong(十)——负载均衡参考

    KONG为请求多个后端服务提供了多种负载均衡方案:一种是简单的基于DNS,另一种是更加动态的环形均衡器,他在不需要DNS服务器的情况下也允许服务注册. 一.基于DNS的负载均衡 当使用基于DNS的负载 ...