前言
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 | class testWindow(QMainWindow, Ui_MainWindow): |
在自动转换生成的类中提供了一个setupUi()函数,在这个函数中实现个各种初始化操作,创建界面上的各种窗体对象。setupUi函数需要在外部手动调用。
同理.qrc资源文件也许转化后才能使用,在我的机器上转化工具路径为:D:\WinPython\python-3.4.4\Lib\site-packages\PyQt5\pyrcc5.exe,转换方法和.ui文件类似。
方法二:通过uic模块动态加载.ui文件
在pyqt中有uic模块,它提供了loadUiType()函数可以直接加载.ui文件。使用如下:
1 | from PyQt5 import uic |
其中返回的Ui_MainWindow就是转换的界面类。和生成的类和方法一实际效果是一致的,只是不需要手动转化,也不会生成专门的界面的.py文件,直接使用Ui_MainWindow即可。使用时同样也需要手动调用setupUi函数。
注意点
在Qt Designer中以什么为原型的窗口,在代码中使用是也需要继承于这个基类,否则会出错。例如创建的ui是以QMainWindow为原型创建的,而在代码中却继承于QWidget,这样是不行的。
在使用方法二时,需要注意.ui文件使用的资源文件;如果在Qt Designer中应用了外部的资源,那么如果直接加载而不管资源文件时会出错