到目前为止,组合式部件的制作已经初具雏形,唯一需要完善的是所有部件和子部件的自动初始化,如果有一个层次比较复杂的组合式部件,靠人工逐个输入子部件的名称显然不现实,比如下图:

这个部件由多层、多个部件组成。初步的思路是:逐层查找并执行初始化,并利用递归的方法直至最底层。
代码:
from PyQt5 import uic
from sys import exit, argv
from PyQt5.QtWidgets import QApplication, QWidget
def form_init(form):  # 显示界面的初始化
    sons = form.findChildren(QWidget)  # 儿辈部件
    def find_son(child):  # 查找子部件
        try:
            child.init()  # 初始化部件
        except AttributeError:
            pass
        if not isinstance(child, QWidget):
            for grandson in child.findChilldren(QWidget):
                find_son(grandson)  # 递归查找
    for son in sons:
        find_son(son)
if __name__ == '__main__':
    app = QApplication(argv)
    # 读取 UI 文件并转换为 Python 代码
    ui_file = '../UIS/test2.ui'  # 更换为实际的ui文件地址
    form0 = uic.loadUi(ui_file)  # 创建显示界面
    form_init(form0)  # 初始化
    form0._selector_1.control2.init(style_enter='border:1px solid  #868686;border-radius:2px;background-color: rgba('
                                                '194, 56, 37, 200);')  # 控制器的control2需要单独定义
    form0.show()
    exit(app.exec_())
 
运行截图

完成。



















