zoukankan      html  css  js  c++  java
  • pyside窗口关闭触发事件

    窗口关闭事件本质上是重写了类内部的closeEvent方法,可以通过重写这个类去实现其他你想要的关闭事件。

    下面的例子实现了一个简单的窗口,并为窗口添加了关闭时弹出提示框的功能。

     1 import sys
     2 from PySide import QtGui
     3 
     4 
     5 class Message(QtGui.QWidget):
     6 
     7     def __init__(self):
     8         # 如果希望窗口内嵌于其他部件,可添加parent参数
     9         super(Message, self).__init__()
    10         # 调用初始化方法
    11         self.initUI()
    12 
    13     def initUI(self):
    14         # 设置窗口的所在位置,以左上角为原点,x轴300, y轴300, 宽250, 长150
    15         self.setGeometry(300, 300, 250, 150)
    16         # 给窗口一个标题名,你将会在标题栏看到这个名字
    17         self.setWindowTitle('Message box')
    18 
    19     def closeEvent(self, event):
    20         # message为窗口标题
    21         # Are you sure to quit?窗口显示内容
    22         # QtGui.QMessageBox.Yes | QtGui.QMessageBox.No窗口按钮部件
    23         # QtGui.QMessageBox.No默认焦点停留在NO上
    24         reply = QtGui.QMessageBox.question(self, 'Message',
    25                                            "Are you sure to quit?",
    26                                         QtGui.QMessageBox.Yes |
    27                                         QtGui.QMessageBox.No,
    28                                         QtGui.QMessageBox.No)
    29         # 判断返回结果处理相应事项
    30         if reply == QtGui.QMessageBox.Yes:
    31             event.accept()
    32         else:
    33             event.ignore()
    34 
    35 
    36 def main():
    37     # 创建qt的主应用
    38     app = QtGui.QApplication(sys.argv)
    39     # 实例化自己写的类
    40     ex = Message()
    41     ex.show()
    42     # 应用关闭时返回0,sys关闭进程
    43     sys.exit(app.exec_())
    44 
    45 
    46 if __name__ == '__main__':
    47     main()

    此外由于有需求多次使用,简单为它写了个装饰器。

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Date    : 2016-06-01 14:56:42
     4 # @Author  : Nevermoreluo (nevermoreluo@gmail.com)
     5 '''
     6 作用:
     7 为关闭窗口事件提供一个弹出框
     8 使用方法:
     9 调用导入close_Event,
    10 用 @close_Event 装饰类即可
    11 
    12 '''
    13 
    14 def close_Event(cls):
    15     from PySide import QtGui
    16     # 装饰器为QWidget,QMainWindow类或子类设置关闭窗口
    17     def opfunc(self, event):
    18         # 将弹出窗口的结果赋值给reply
    19         reply = QtGui.QMessageBox.question(self, 'Message',
    20                                            u"确定要退出吗?",
    21                                            QtGui.QMessageBox.Yes |
    22                                            QtGui.QMessageBox.No,
    23                                            QtGui.QMessageBox.No)
    24         # 检验用户返回,并返回对应的结果
    25         if reply == QtGui.QMessageBox.Yes:
    26             event.accept()
    27         else:
    28             event.ignore()
    29     # 将函数赋值给类的closeEvent方法
    30     setattr(cls, 'closeEvent', opfunc)
    31     return cls
  • 相关阅读:
    EF框架 处理decimal字段 Sum() 遇到NULL时的特殊处理
    RSA加密解密及RSA签名和验证
    SQL 类似switch的东东用法
    js抛物线动画
    MyBatis的结果映射(resultMap)
    mybatis中#和$符号的区别
    MyBatis 中Mapper.xml中注意事项
    MyBatis sql映射器 Mapper
    MyBatis的自定义别名和内置别名
    MyBatis简单认识(入门)
  • 原文地址:https://www.cnblogs.com/nevermoreluo/p/5572091.html
Copyright © 2011-2022 走看看