生成treeWidget树与获取treeWidget树节点的数据
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