pyqt treeWidget树生成

发布时间:2024年01月11日

生成treeWidget树与获取treeWidget树节点的数据

# encoding=UTF-8
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QTreeWidgetItem, QLineEdit, QSpinBox, QComboBox
from PyQt5.QtWidgets import QWidget
from release_test import Ui_Form


CASE_CONFIG = {
    "test1": [
        {"name": "运行次数", "value": QSpinBox, "min": 0, "max": 10, "default": 1},
        {"name": "超时(秒)", "value": QSpinBox, "min": 0, "max": 60, "default": 0},
    ],
    "test2": [
        {"name": "采集11", "value": QLineEdit, "default": "50020200"},
        {"name": "采集22", "value": QLineEdit, "default": "20210200,20000200,20010200,20010400,20040200,20050200,200A0200,00100200,00000200,00200200"},
        {"name": "采集间隔(分钟)", "value": QComboBox, "items": ["1", "5", "15"], "default": "5"},
        {"name": "超时(秒)", "value": QSpinBox, "min": 0, "max": 9999, "default": 0},
    ]
}


class MainModule(QWidget, Ui_Form):
    def __init__(self):
        super().__init__(parent=None)
        self.setupUi(self)
        self.init_case_tree()
        self.save_conf_btn.clicked.connect(self.save_conf)

    def init_case_tree(self):
        self.treeWidget.setHeaderLabels(["参数", "值"])
        self.treeWidget.setColumnWidth(0, 250)

        for case_name in CASE_CONFIG:
            case_item = QTreeWidgetItem([case_name])
            for conf in CASE_CONFIG[case_name]:
                conf_name_item = QTreeWidgetItem([conf["name"]])
                case_item.addChild(conf_name_item)
                conf_value_item = conf["value"]()
                if isinstance(conf_value_item, QSpinBox):
                    min_value = conf["min"]
                    max_value = conf["max"]
                    default_value = conf["default"]
                    conf_value_item.setRange(min_value, max_value)
                    conf_value_item.setValue(default_value)
                    conf_value_item.setMaximumWidth(100)
                elif isinstance(conf_value_item, QComboBox):
                    items = conf["items"]
                    default_value = conf["default"]
                    conf_value_item.addItems(items)
                    conf_value_item.setCurrentText(default_value)
                    conf_value_item.setMaximumWidth(100)
                elif isinstance(conf_value_item, QLineEdit):
                    default_value = conf["default"]
                    conf_value_item.setText(default_value)
                self.treeWidget.setItemWidget(conf_name_item, 1, conf_value_item)
            case_item.setCheckState(0, Qt.Checked)
            self.treeWidget.addTopLevelItem(case_item)
        self.treeWidget.expandAll()

    def save_conf(self):
        conf_info = {}
        case_cnt = self.treeWidget.topLevelItemCount()
        for case_index in range(case_cnt):
            case_item = self.treeWidget.topLevelItem(case_index)
            case_name = case_item.text(0)
            conf_info[case_name] = {}
            conf_cnt = case_item.childCount()
            print(case_name)
            for conf_index in range(conf_cnt):
                conf_item = case_item.child(conf_index)
                conf_name = conf_item.text(0)
                conf_value_item = self.treeWidget.itemWidget(conf_item, 1)
                if isinstance(conf_value_item, QSpinBox):
                    value = conf_value_item.value()
                elif isinstance(conf_value_item, QComboBox):
                    value = conf_value_item.currentText()
                elif isinstance(conf_value_item, QLineEdit):
                    value = conf_value_item.text()
                else:
                    value = ""
                print(conf_name, value)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainModule()
    mainWindow.show()
    sys.exit(app.exec())
test1
运行次数 1
超时() 0
test2
采集11 50020200
采集22 20210200,20000200,20010200,20010400,20040200,20050200,200A0200,00100200,00000200,00200200
采集间隔(分钟) 5
超时() 0

在这里插入图片描述

文章来源:https://blog.csdn.net/sky0Lan/article/details/135482598
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。