我有一个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)