PySide从实战开始学习系列(三)QTreeWidget的使用

版权声明: https://blog.csdn.net/jeremyjone/article/details/81013689

上一篇已经实现了小项目的界面,这一篇主要实现Tree的内容。


在学习编程语言的时候,记得老师在讲递归时最经典的两个例子:一个是文件夹的遍历,一个是扫雷。

遍历这玩意在tree中再合适不过,所以,往QTreeWidget中添加数据,就用递归实现。


递归没什么好说的,直接上,只是QTreeWidget的子项叫QTreeWidgetItem,每个子项都是一个QTreeWidgetItem,所以,

需要自定义json文件的key值为全局变量,方便使用:

TREE_NODE = "items"   # json文件中子项key
TREE_NODE_NAME = "label"   # 每项显示在tree中的名字的key

递归代码如下:

# 获取tree数据的递归函数,在取值时使用
def get_data(widget, data_list):
    for data in data_list:
        # 创建一个新的tree子项
        new_widget = QtGui.QTreeWidgetItem(widget)
        # 判断是否有label项,如果有,子项显示label名,如果没有,显示No Label
        if data.has_key(u"label"):
            new_widget.setText(0, data[TREE_NODE_NAME])
        else:
            new_widget.setText(0, "No Label")
        # 把所有数据放到新创建的子项中
            new_widget.setData(0, QtCore.Qt.UserRole, data)
        # 判断是否有子项
        if data.has_key(TREE_NODE):
            get_data(new_widget, data[TREE_NODE])

有了这个函数,让QTreeWidget显示数据就很简单了

# 左边tree
self.tree = QtGui.QTreeWidget(self)
self.tree.setColumnCount(1)
self.tree.setHeaderHidden(1)
self.tree.setGeometry(QtCore.QRect(1, 1, 250, 500))
# 添加数据
# 首先创建tree的根,设置根名和根数据,然后调用递归循环出所有节点
root = QtGui.QTreeWidgetItem(self.tree)
root.setText(0, JSON_FILE[TREE_NODE_NAME])
root.setData(0, QtCore.Qt.UserRole, JSON_FILE)
get_data(root, JSON_FILE[TREE_NODE])
这样,左边的树结构就可以显示内容了


顺便设置一下右边table的格式

# 右边table
self.table = QtGui.QTableWidget(self)
# 设置table的行和列
self.table.setColumnCount(2)
self.table.setRowCount(6)
# 设置table的列标题
self.table.setHorizontalHeaderLabels(['title', 'value'])
self.table.setGeometry(QtCore.QRect(250, 1, 350, 500))
# 设置table的行、列标题是否显示
self.table.verticalHeader().setVisible(False)
self.table.horizontalHeader().setVisible(True)


至此,大体的格式就已经出现了。效果如下:



有了这样的基础,我们就可以考虑显示信息了。

在PySide中,信息的传递都是通过信号和槽来实现的,下一篇我们来实现它!


猜你喜欢

转载自blog.csdn.net/jeremyjone/article/details/81013689