窗口关闭事件本质上是重写了类内部的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 ([email protected]) 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
时间: 2024-10-09 03:12:05