pyqt使用.ui文件的两种方法

前言

Qt时是最常用的界面开发库之一,原生的Qt程序开发是使用的C++语言,而pyqt模块则让你可以用python语言来开发Qt程序。

在Qt开发环境中Qt Designer是非常方便的界面设计工具,通过Qt Designer设计的界面会保存为.ui文件。打开这些.ui文件可以看出,他们其实是记录界面信息和格式的xml文件,python是不能直接使用这类.ui文件,需要将.ui转化后才能使用。本文将介绍在通过pyqt模块使用这些.ui文件的两种方法。

方法一:将.ui文件转化为.py文件后使用

pyqt模块中提供将pyuic5.bat工具可以.ui文件转化为.py文件,在我的机器上目录为:’D:\WinPython\python-3.4.4\Scripts\pyuic5.bat’

在命令行中执行如下命令,即可生成指定的.py文件:

1
D:\WinPython\python-3.4.4\Scripts\pyuic5.bat -o UI_QtWindow.py QtWindow.py

打开转化后的.py文件可以看到,pyuic.bat工具自动生成了一个继承于“object”的界面类。在使用,通常新建一个界面继承于这个类和QtWidgets的基类的新类。如下我是创建的QMainWindow界面ui,所以继承于QMainWindow和生产的Ui_MainWindow类:

1
2
3
4
5
class testWindow(QMainWindow, Ui_MainWindow):
"""docstring for testWindow"""
def __init__(self):
super(testWindow, self).__init__()
self.setupUi(self)

在自动转换生成的类中提供了一个setupUi()函数,在这个函数中实现个各种初始化操作,创建界面上的各种窗体对象。setupUi函数需要在外部手动调用。

同理.qrc资源文件也许转化后才能使用,在我的机器上转化工具路径为:D:\WinPython\python-3.4.4\Lib\site-packages\PyQt5\pyrcc5.exe,转换方法和.ui文件类似。

方法二:通过uic模块动态加载.ui文件

在pyqt中有uic模块,它提供了loadUiType()函数可以直接加载.ui文件。使用如下:

1
2
from PyQt5 import uic
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatFile)

其中返回的Ui_MainWindow就是转换的界面类。和生成的类和方法一实际效果是一致的,只是不需要手动转化,也不会生成专门的界面的.py文件,直接使用Ui_MainWindow即可。使用时同样也需要手动调用setupUi函数。

注意点

  1. 在Qt Designer中以什么为原型的窗口,在代码中使用是也需要继承于这个基类,否则会出错。例如创建的ui是以QMainWindow为原型创建的,而在代码中却继承于QWidget,这样是不行的。

  2. 在使用方法二时,需要注意.ui文件使用的资源文件;如果在Qt Designer中应用了外部的资源,那么如果直接加载而不管资源文件时会出错

Compartir