到目前为止,组合式部件的制作已经初具雏形,唯一需要完善的是所有部件和子部件的自动初始化,如果有一个层次比较复杂的组合式部件,靠人工逐个输入子部件的名称显然不现实,比如下图:
这个部件由多层、多个部件组成。初步的思路是:逐层查找并执行初始化,并利用递归的方法直至最底层。
代码:
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_())
运行截图
完成。