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 ([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

pyside窗口关闭触发事件的相关文章

滑动窗口滚动条触发事件

$(window).on("scroll", function() { if (timer) { clearTimeout(timer); timer = null; } timer = setTimeout(function() { var st = $(window).scrollTop(); $("#imgbox").css('top',st+"px"); //弹出窗 if(st>240){ $(".infoimg"

jquery:iframe里面的元素怎样触发父窗口元素的事件?

例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, parent.document).trigger('topEvent'); 看似正确,实则误导人. 因为父窗口的jquery对象与iframe里面的jquery对象实际为两个对象(function),iframe里面的jquery并不会触发另一个jquery对象定义的事件.除非你在iframe这样

JavaScript捕获window窗口关闭事件

工作中遇到有这样的情景,要在浏览器窗口关闭的时候,提示用户某种操作. 类似在关闭窗口时,提示用户保存当前内容,选择是则保存并关闭窗口,选择否则不关闭窗口,也不做保存操作. 网上找了很多,都是说用js处理window关闭事件的,要么说onbeforeunload 方法,要么说onunload方法. 感觉都不能实现.后来突然想到这样的办法:用这两个方法一起来实现! 原因: onbeforeunload 事件将会在关闭窗口前执行,你也可以用户决定是否关闭窗口,这个方法只要有返回值并且不是""

C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法

场景 C#中委托与事件的使用-以Winform中跨窗体传值为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100150700 参考上面的博客. 现在是在主页面点击按钮时弹出窗体,在窗体的load事件中进行事件的订阅,然后关闭窗体,再次打开时执行触发事件后, 订阅的事件就会执行两次,依次类推. 这是因为在窗体关闭的时候没有将原来的事件订阅解除掉. 注: 博客主页: https://blog.csdn.net/badao_l

Vue中监听窗口关闭事件并在窗口关闭前发送请求

Vue中监听窗口关闭事件并在窗口关闭前发送请求,代码如下: mounted() { window.addEventListener('beforeunload', e => this.beforeunloadHandler(e)) window.addEventListener('unload', e => this.unloadHandler(e)) }, destroyed() { window.removeEventListener('beforeunload', e => thi

javascript鼠标双击时触发事件大全

javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown IE4.N4 按下鼠标时触发此事件 onmouseup IE4.N4 鼠标按下后松开鼠标时触发此事件 onmouseover IE3.N2 当鼠标移动到某对象范围的上方时触发此事件 onmousemove IE4.N4 鼠标移动时触发此事件 onmouseout IE4.N3 当鼠标离开某对象范围

界面关闭的事件响应

最近使用了窗口关闭事件:void QWidget::closeEvent ( QCloseEvent * event ) [virtual protected] 当用鼠标点击关闭按钮或者在任务栏上右击关闭,都会触发这一事件,实现效果如下: 附上实现代码: 这是主界面的关闭事件(CallTrace为主界面) 1 void CallTrace::closeEvent(QCloseEvent *e) 2 { 3 closeDialog = new CloseDialog; 4 closeDialog-

自己收藏-javascript用window.open的子窗口关闭自己并且刷新父窗口

function closeMeAndReloadParent() { opener.location.reload(); window.close(); } 一种在父窗口中得知window.open()出的子窗口关闭事件的方法 <HTML><BODY><P> </P><form name=fm_Info><input type=text name=txtValue></form><script language=j

JS触发事件大全

      事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown IE4.N4 按下鼠标时触发此事件 onmouseup IE4.N4 鼠标按下后松开鼠标时触发此事件 onmouseover IE3.N2 当鼠标移动到某对象范围的上方时触发此事件 onmousemove IE4.N4 鼠标移动时触发此事件 onmouseout IE4.N3 当鼠标离开某对象范围时触发此事件 onke