微软存放位置在哪里
594
2022-05-29
欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请搜藏哈。
文章目录
HUD_Qt_for_Python开发之路3
1 UI文件与Python结合
1.1 将UI文件编译为一个Python类(静态加载)
1.2 问题
2 直接加载UI文件(动态加载)
2.1 加载UI文件
2.2 问题
3 交互问题
总结
HUD_Qt_for_Python开发之路3
1 UI文件与Python结合
这小节将研究下UI文件怎么与Python结合,还是老样子,先找帮助文档,看看有没有帮助。
通过查看帮助文档得知,UI文件与Python结合有两种方式
将UI文件编译为一个Python类使用
直接在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里面的控件我怎么调用没有说,对于毫无经验的新手来说,是在是太难了。你看下面这样
这样
阿西吧,简直就是灾难现场,这几天就是一天研究一句话,这进度,都没法和蜗牛比。要崩溃了,不搞了。
总结
其实动态加载和静态加载都有各自的优缺点,这将像是你你和你女朋友在一起的时间一样,可以短了刺激,长了就是陪伴,这个也是要结合着使用,可以先在动态里面吧界面搞定了,完了在转成静态的,配合Python进行高级开发。
Python Qt
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。