PyQt5 、PySide2导入Ui文件的两种方式

一、动态加载UI文件

有了界面定义文件,我们的Python程序就可以从文件中加载UI定义,并且动态 创建一个相应的窗口对象。

如下:

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

class Stats:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit

        self.ui = QUiLoader().load('main.ui') #pyside2

        # 如果你使用的是PyQt5 而不是 PySide2,加载UI文件的代码如下
        # self.ui = uic.loadUi("main.ui") #PyQt

        self.ui.button.clicked.connect(self.handleCalc)

    def handleCalc(self):
        print("hand clicked")



if __name__ == '__main__':

    app = QApplication([])
    stats = Stats()
    stats.ui.show()
    app.exec_()

二、转化UI文件为Python代码

还有一种使用UI文件的方式:先把UI文件直接转化为包含界面定义的Python代码文件,然后在你的程序中使用定义界面的类

  1. 执行如下的命令 把UI文件直接转化为包含界面定义的Python代码文件
pyside2-uic main.ui > ui_main.py

如果你安装的是PyQt5,执行如下格式的命令转化

pyuic5 main.ui > ui_main.py

然后在你的代码文件中这样使用定义界面的类

from PySide2.QtWidgets import QApplication,QMainWindow

from ui_main import Ui_MainWindow


# 注意 这里选择的父类 要和你UI文件窗体一样的类型
# 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        # 使用ui文件导入定义界面类
        self.ui = Ui_MainWindow()

        # 初始化界面
        self.ui.setupUi(self)

        self.ui.button.clicked.connect(self.handleCalc)


    def handleCalc(self):
        print("hand clicked")



if __name__ == '__main__':

    app = QApplication([])
    mainw = MainWindow()
    mainw.show()
    app.exec_()

那么我们该使用哪种方式比较好呢?动态加载还是转化为Python代码?

通常采用动态加载比较方便,因为改动界面后,不需要转化,直接运行,特别方便。缺点是有的类和方法不能自动补全,有时候难以接受。

如果 你的程序里面有非qt designer提供的控件, 这时候,需要在代码里面加上一些额外的声明,而且 可能还会有奇怪的问题。往往就 要采用 转化Python代码的方法。并且有自动补全,生成软件包的时候也比较方便

个人推荐使用转化UI文件为Python代码的方式

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高亚奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值