自定义 QTreeWidgetItem Pyside2
Customize QTreeWidgetItem Pyside2
我有一个 QTreeWidget
,我希望每一行都像这个小部件:
我知道如何创建小部件本身,如何创建基本的 QTreeWidgetItem,但我不知道如何将它们结合在一起。
我正在使用 PySide2 和 python。
没有任何最小可重现示例,如果我理解了你的问题,你可以尝试类似的方法。
它创建一个项目,您可以在每一列中分配一个文本或另一个小部件。
from PySide2 import QtWidgets, QtCore, QtGui
class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent=parent)
layout = QtWidgets.QVBoxLayout()
self.treewidget = QtWidgets.QTreeWidget()
self.treewidget.setColumnCount(4)
layout.addWidget(self.treewidget)
self.setLayout(layout)
self.build_tree()
def build_tree(self):
for index in range(10):
item = QtWidgets.QTreeWidgetItem(self.treewidget)
item.setText(0, 'icon 1')
item.setText(1, 'icon 2')
line_edit = QtWidgets.QLineEdit(self.treewidget)
push_button = QtWidgets.QPushButton(self.treewidget)
push_button.setText('TEST')
self.treewidget.setItemWidget(item, 2, line_edit)
self.treewidget.setItemWidget(item, 3, push_button)
app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec_()
如果你不想在你的 treewidget 中有超过一列,我认为你可以使用 Qwidget 和这样的布局(只需替换方法)。
def build_tree(self):
for index in range(10):
item = QtWidgets.QTreeWidgetItem(self.treewidget)
widget = QtWidgets.QWidget()
layout = QtWidgets.QHBoxLayout()
label_1 = QtWidgets.QLabel('icon 1')
label_2 = QtWidgets.QLabel('icon 2')
line_edit = QtWidgets.QLineEdit()
push_button = QtWidgets.QPushButton('TEST')
layout.addWidget(label_1)
layout.addWidget(label_2)
layout.addWidget(line_edit)
layout.addWidget(push_button)
widget.setLayout(layout)
self.treewidget.setItemWidget(item, 0, widget)
并在 init 方法中删除这一行:
self.treewidget.setColumnCount(4)
我有一个 QTreeWidget
,我希望每一行都像这个小部件:
我知道如何创建小部件本身,如何创建基本的 QTreeWidgetItem,但我不知道如何将它们结合在一起。
我正在使用 PySide2 和 python。
没有任何最小可重现示例,如果我理解了你的问题,你可以尝试类似的方法。
它创建一个项目,您可以在每一列中分配一个文本或另一个小部件。
from PySide2 import QtWidgets, QtCore, QtGui
class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent=parent)
layout = QtWidgets.QVBoxLayout()
self.treewidget = QtWidgets.QTreeWidget()
self.treewidget.setColumnCount(4)
layout.addWidget(self.treewidget)
self.setLayout(layout)
self.build_tree()
def build_tree(self):
for index in range(10):
item = QtWidgets.QTreeWidgetItem(self.treewidget)
item.setText(0, 'icon 1')
item.setText(1, 'icon 2')
line_edit = QtWidgets.QLineEdit(self.treewidget)
push_button = QtWidgets.QPushButton(self.treewidget)
push_button.setText('TEST')
self.treewidget.setItemWidget(item, 2, line_edit)
self.treewidget.setItemWidget(item, 3, push_button)
app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec_()
如果你不想在你的 treewidget 中有超过一列,我认为你可以使用 Qwidget 和这样的布局(只需替换方法)。
def build_tree(self):
for index in range(10):
item = QtWidgets.QTreeWidgetItem(self.treewidget)
widget = QtWidgets.QWidget()
layout = QtWidgets.QHBoxLayout()
label_1 = QtWidgets.QLabel('icon 1')
label_2 = QtWidgets.QLabel('icon 2')
line_edit = QtWidgets.QLineEdit()
push_button = QtWidgets.QPushButton('TEST')
layout.addWidget(label_1)
layout.addWidget(label_2)
layout.addWidget(line_edit)
layout.addWidget(push_button)
widget.setLayout(layout)
self.treewidget.setItemWidget(item, 0, widget)
并在 init 方法中删除这一行:
self.treewidget.setColumnCount(4)