#!/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. snmpv3-snmpd.conf解析

    1.先指定createUser语句,设置密码和传输密钥. createUser user1 createUser user2 MD5 user2password createUser user3 MD ...

  2. 简单HOG+SVM mnist手写数字分类

    使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images- ...

  3. redmine3.3.3 rake db:migrate 报错invalid byte sequence in US-ASCII (Argument Error) 解决方法

    这个错误有点莫名其妙,系统默认的就是utf-8,可bundle就是不对.. rake db:migrate 结果没有任何错误,反而是网页passenger 提示了这个错误 参考:https://git ...

  4. 2018春招-今日头条笔试题-第三题(python)

    题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出‘1234567890’,对于输入表达试获得对应的结果利用python内置函数eval ...

  5. 【java排序】 归并排序算法、堆排序算法

    一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...

  6. LINUX 实现端口转发 - 安装使用rinetd

    网上查找安装rinetd 安装时候问题如下一致,找到此文,方解决. 源地址 系统环境:centos 5.4 系统需要gcc组件 yum -y install gcc*  安装完毕以后 首先下载wget ...

  7. Vue图片懒加载之lazyload插件使用

    当内容没有加载完的时候,用户体验不是很好,这时候,可以使用lazyload这个插件,提升用户体验,使用方法特别简单易用 一. vue lazyload插件: 插件地址:https://github.c ...

  8. #pragma的一些用法

    1.#pragma message message 参数:Message参数能够在编译信息输出窗口输出相应的信息,这对于源代码的信息控制特别重要,其使用方法为: #pragma message(&qu ...

  9. Boosting和Bagging的异同

    二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法. 1.Bagging (主要关注降低方差) Bagging即套袋法,其算法过程如下: A)从原始样本集中抽取训练集.每轮从原始样本集中使用 ...

  10. Tensorflow 方法记录

    1.tf.convert_to_tensor:传入的list必须是一个有固定长度的list,如果为2维的list,第二维的list的长度必须是固定. 2.tf.layers.conv1d(),默认宽卷 ...