【PySide2学习笔记(一)】PySide2动态加载UI方式,重写关闭窗体事件

文探索了动态加载UI方式,重写关闭窗体事件,希望对初学者有用。


前言

动态加载UI后,怎样重写关闭窗体事件?笔者一年前,多次询问过、查询过这个问题,网上的主要的解决方法:

  1. 重写QuiLoader()方法:用这个重写的QuiLoader()方法加载UI,之后的重写Even常规进行。
  2. 先写一个QWindow类,其中重写Even;然后实例化这个类,将UI动态加载到其中。

进来,通过摸索,发现并没有这么复杂,具体见下文:

一、关于动态加载UI

动态加载UI,即:使用QUiLoader().load()方法加载UI。

我们动态加载ui文件时,使用了QUiLoader().load()方法,这个方法不能够接收主窗体的Close()事件,因此我们重写的Close()事件不生效。

下面分为UI为QWedget、QWindow两种情况,动态加载UI后,重写的Close()事件。

二、动态加载UI后,重写的Close()事件

1.UI为QWedget

理论不多讲,直接上代码,需要注意的地方已经标注(亲测有效):

from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication,QMainWindow, QWidget

class Window(QWidget): # 注意此处
    def __init__(self):
        super().__init__()
        self.ui = QUiLoader().load('main2.ui',self) # 注意此处

    def closeEvent(self, event):  # 仅为测试用,具体事件自写
        print('hi')

if __name__ == '__main__':
    app = QApplication([])
    main = Window()
    main.show() # 注意此处,不是ui.show()
    app.exec_()

2.UI为QWindow

简单明了,直接上代码,需要注意的地方已经标注(亲测有效):

from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication,QMainWindow

class Window(QMainWindow): # 注意此处
    def __init__(self, parent=None): # 注意此处
        super(Window, self).__init__(parent) # 注意此处
        self.ui = QUiLoader().load('main1.ui',parent)
        self.setCentralWidget(self.ui) # 注意此处:将self.ui加载到 QMainWindow 的CentralWidget
        self.resize(800, 500)

    def closeEvent(self, event): #仅为测试用,具体事件自写
        print('hi')

if __name__ == '__main__':
    app = QApplication([])
    main = Window()
    main.show() # 注意此处,不是ui.show()
    app.exec_()

总结

动态加载UI界面的方式可以随时更新调测UI,更加方便快捷,尤其受初学者的喜爱。但是,QuiLoader是使用组合的方法将控件塞入内部命名空间,并没有真正创建一个顶级类,因此无法响应事件。本文探索了动态加载UI方式,重写关闭窗体事件,希望对初学者有用。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值