博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyside窗口关闭触发事件
阅读量:5763 次
发布时间:2019-06-18

本文共 2463 字,大约阅读时间需要 8 分钟。

窗口关闭事件本质上是重写了类内部的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, 长15015         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 QtGui16     # 装饰器为QWidget,QMainWindow类或子类设置关闭窗口17     def opfunc(self, event):18         # 将弹出窗口的结果赋值给reply19         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

 

转载于:https://www.cnblogs.com/nevermoreluo/p/5572091.html

你可能感兴趣的文章