使用PyQt6 uic 在终端生成py代码命令如下:
python -m PyQt6.uic.pyuic uifile.ui -o uifile.py
在pycharm的设置如下:
通过PyQt附带的designer设计好UI后,通过uic可以将ui文件转换为py文件, 生成py文件后类似下面的代码:
class Ui_Frame(object):
def setupUi(self, Frame):
# ...
ui类默认从object派生,如果直接使用该文件进行后续开发,需要将object替换为QWidget才能将界面显示出来,类似下面的代码
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QWidget
class Ui_Frame(QWidget):
def __init__(self):
super(Ui_Frame, self).__init__()
self.setupUi(self)
def setupUi(self, Frame):
pass
# ...
而且如果后期一旦界面更新,需要重新生成文件的时候内容会被覆盖,不利于界面和代码的分离,每次手动修改也麻烦,于是想到能不能修改编译器代码生成把ui代码类(Ui_Frame)的生成修改一下,改成上图所示的那样,业务逻辑在Ui_Frame的派生类进行处理,这样每次变更ui重新生成代码,对于业务逻辑处理的影响降到最小
通过翻看uic的源码 (site-packages\PyQt6\uic 路径下),可以实现上面的修改
我这边的实现修改了三个文件:
site-packages\PyQt6\uic\pyuic.py
site-packages\PyQt6\uic\compile_ui.py
site-packages\PyQt6\uic\Compiler\compiler.py
修改步骤如下:
1.pyuic.py文件的修改&#