05_HUD_Qt_for_Python开发之路3

举报
DreamLife 发表于 2022/04/15 01:17:55 2022/04/15
【摘要】 欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。 文章目录 HUD_Qt_for_Python开发之路31 UI文件与Python结合1.1 将UI文件编译为一个Py...

titlle bar

欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。

HUD_Qt_for_Python开发之路3

1 UI文件与Python结合

这小节将研究下UI文件怎么与Python结合,还是老样子,先找帮助文档,看看有没有帮助。

通过查看帮助文档得知,UI文件与Python结合有两种方式

  1. 将UI文件编译为一个Python类使用
  2. 直接在Python中加载UI文件

1.1 将UI文件编译为一个Python类(静态加载)

此时加入我们的UI文件名称为mainwindow.ui文件,那么需要执行以下指令,来将我们的UI文件转化为类

pyside6-uic mainwindow.ui > ui_mainwindow.py

  
 
  • 1

上面这天命令执行完毕后,我们将得到一个ui_mainwindow.py的文件,在使用的时候,使用下面指令,导入即可

from ui_mainwindow import Ui_MainWindow

  
 
  • 1

完成代码如下:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCore import QFile
from ui_mainwindow import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

重点就是加载UI文件的两句话

self.ui = Ui_MainWindow()
self.ui.setupUi(self)

  
 
  • 1
  • 2

1.2 问题

用这种方法使用到时没有问题,应该是适用于那种前后端分离的情况,前端UI已经全部制作完成,后端拿到现成的UI文件来实现逻辑逻辑控制即可,要是UI文件和开发是同时进行,那么这种方法就不咋合适了,总不能没更新一个UI就执行一次pyside6-uic 吧 。所以我还是要用第二种了,直接加载的方式。

2 直接加载UI文件(动态加载)

直接加载UI文件可以很好的规避掉第一种方式中每次更新UI文件都需要重新编译的一次的问题。使用这种加载UI文件的方式,需要用到QUiLoader模块,只需要引入即可

from PySide6.QtUiTools import QUiLoader

2.1 加载UI文件

帮助文档中加载UI文件代码如下

ui_file = QFile("mainwindow.ui")
ui_file.open(QFile.ReadOnly)

loader = QUiLoader()
window = loader.load(ui_file)
window.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

但是呢,在最新的Qt6中,自动生成的代码有点不一样,如下:

    def load_ui(self):
        loader = QUiLoader()
        path = os.path.join(os.path.dirname(__file__), "hud.ui")
        ui_file = QFile(path)
        ui_file.open(QFile.ReadOnly)
        loader.load(ui_file, self)
        ui_file.close()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其实就是多加了一个获取文件路径的内容吧,应该理解没有错哈。

这里贴一下官方文档中的完整代码供参考

import sys
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QFile, QIODevice

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui_file_name = "mainwindow.ui"
    ui_file = QFile(ui_file_name)
    if not ui_file.open(QIODevice.ReadOnly):
        print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
        sys.exit(-1)
    loader = QUiLoader()
    window = loader.load(ui_file)
    ui_file.close()
    if not window:
        print(loader.errorString())
        sys.exit(-1)
    window.show()

    sys.exit(app.exec_())

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.2 问题

这种方式就是我们的控件没法自动补全,因为编译器也不知道你继承自哪里。

3 交互问题

这里就要尴尬了,官方文档只说了怎么加载UI文件,问题是UI里面的控件我怎么调用没有说,对于毫无经验的新手来说,是在是太难了。你看下面这样

image-20210323103439852

这样

image-20210323103528104

阿西吧,简直就是灾难现场,这几天就是一天研究一句话,这进度,都没法和蜗牛比。要崩溃了,不搞了。8856eac7gy1ffd58s53m8g2028028t8j

总结

其实动态加载和静态加载都有各自的优缺点,这将像是你你和你女朋友在一起的时间一样,可以短了刺激,长了就是陪伴,这个也是要结合着使用,可以先在动态里面吧界面搞定了,完了在转成静态的,配合Python进行高级开发。


博客签名2021

文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/119914858

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。