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

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

 import sys
from PySide import QtGui class Message(QtGui.QWidget): def __init__(self):
# 如果希望窗口内嵌于其他部件,可添加parent参数
super(Message, self).__init__()
# 调用初始化方法
self.initUI() def initUI(self):
# 设置窗口的所在位置,以左上角为原点,x轴300, y轴300, 宽250, 长150
self.setGeometry(300, 300, 250, 150)
# 给窗口一个标题名,你将会在标题栏看到这个名字
self.setWindowTitle('Message box') def closeEvent(self, event):
# message为窗口标题
# Are you sure to quit?窗口显示内容
# QtGui.QMessageBox.Yes | QtGui.QMessageBox.No窗口按钮部件
# QtGui.QMessageBox.No默认焦点停留在NO上
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?",
QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No,
QtGui.QMessageBox.No)
# 判断返回结果处理相应事项
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore() def main():
# 创建qt的主应用
app = QtGui.QApplication(sys.argv)
# 实例化自己写的类
ex = Message()
ex.show()
# 应用关闭时返回0,sys关闭进程
sys.exit(app.exec_()) if __name__ == '__main__':
main()

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

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2016-06-01 14:56:42
# @Author : Nevermoreluo (nevermoreluo@gmail.com)
'''
作用:
为关闭窗口事件提供一个弹出框
使用方法:
调用导入close_Event,
用 @close_Event 装饰类即可 ''' def close_Event(cls):
from PySide import QtGui
# 装饰器为QWidget,QMainWindow类或子类设置关闭窗口
def opfunc(self, event):
# 将弹出窗口的结果赋值给reply
reply = QtGui.QMessageBox.question(self, 'Message',
u"确定要退出吗?",
QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No,
QtGui.QMessageBox.No)
# 检验用户返回,并返回对应的结果
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
# 将函数赋值给类的closeEvent方法
setattr(cls, 'closeEvent', opfunc)
return cls

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

  1. Python窗口学习之浅尝按键触发事件

    一.窗口上敲键盘触发事件(以Enter键为例) 二.点击窗口按钮触发事件(以鼠标左键双击为例) 代码: import tkinter as tk root = tk.Tk() root.geometr ...

  2. js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法

    js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法 javascript如何捕捉IE窗口失去焦点事件window.onblur = function(e) { //you code}; 弹框的 ...

  3. javascript捕获页面窗口关闭事件

    javascript捕获窗口关闭事件有两种方法 onbeforeunload()      ,onUnload() 用法有两种: 1.    function      window.onbefore ...

  4. gtk+程序在关闭主窗口时的事件流

    当鼠标单击gtk+窗口的关闭按钮时,程序首先接收到delete_event,当该事件处理函数返回TRUE表示事件已处理禁止进一步传播,从而取消关闭操作:当返回FALSE时,事件消息进一步向上传播,此时 ...

  5. Easyui 关闭jquery-easui tab标签页前触发事件

    关闭jquery-easui tab标签页前触发事件 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 需求场景 点击父页面tab 页关闭按钮时,需要做判断,判 ...

  6. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法

    好久没见了 在项目中遇到一个小小的需求,总结了一下! 详细我就不介绍了,相信大家用过的话,很了解.详见文档-----------> http://element-cn.eleme.io/#/zh ...

  7. pyqt pyside 设置窗口关闭时删除自身

    pyqt pyside 设置窗口关闭时删除自身 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

  8. C# 窗口关闭事件

    首先添加一个退出事件函数 //退出按键 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogRe ...

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

    场景 C#中委托与事件的使用-以Winform中跨窗体传值为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100150700 ...

随机推荐

  1. Linux 终端常用快捷键

    Tab 自动补全 Ctrl+L 清屏 Ctrl+A 移动到头 Ctrl+E 移动到尾 Ctrl+左键头 左移一个单词 Ctrl+右箭头 右移一个单词 Ctrl+U 删除左边所有字符 Ctrl+K 删除 ...

  2. iOS学习之判断是否有网络的方法

    在实际开发中, 会有这样一个需求: 用户在有网的状态下会直接从网络请求数据, 在没网的情况下直接从本地读取数据. 下边的方法可以判断是否有网络. - (BOOL)connectedToNetwork ...

  3. mstsc连接服务器时如何避免每次在登陆窗口输入密码(rdp passwd decrypted )

    http://blog.chinaunix.net/uid-1835840-id-2831518.html 我们经常需要连接很多服务器,或者服务器的ip经常变动.把连接的密码保存在rdp配置文件里,用 ...

  4. kanboard邮件通知

    1. 复制config.default.php为config.php 2. 修改一下内容 define('MAIL_TRANSPORT', 'smtp');define('MAIL_SMTP_HOST ...

  5. Android 数据库管理— — —创建数据库

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  6. knockout.js 简介

    Knockout是一个轻量级的UI类库,通过应用MVVM模式使JavaScript前端UI简单化. Knockout有如下4大重要概念: 声明式绑定 (Declarative Bindings):使用 ...

  7. web兼容行探究1:IE 6 select节点显示在绝对布局之上的解决方法

    解决方式就是在绝对布局的元素下放置一个一样大小的iframe元素,这样iframe可以将select盖住,同时解决了问题. 源码如下: <!-- IE6BUG select在絕對定位的元素之上顯 ...

  8. hadoop2的高可用性

    1   hadoop2  namenode由一个节点变成两个节点,同时在线,且同时只有一个是活跃的,如果一个出了问题,另外一个立即接替:没必要配置Secondary NameNode.Checkpoi ...

  9. BZOJ 1537 二维偏序

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  10. Longest Increasing Path in a Matrix -- LeetCode 329

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...