我在SO上找到了这段代码:
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.tree = QtGui.QTreeWidget(self)
self.tree.setHeaderHidden(True)
for index in range(2):
parent = self.addItem(self.tree, 'Item%d' % index)
for color in 'Red Green Blue'.split():
subitem = self.addItem(parent, color)
for letter in 'ABC':
self.addItem(subitem, letter, True, False)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.tree)
self.tree.itemChanged.connect(self.handleItemChanged)
def addItem(self, parent, text, checkable=False, expanded=True):
item = QtGui.QTreeWidgetItem(parent, [text])
if checkable:
item.setCheckState(0, QtCore.Qt.Unchecked)
else:
item.setFlags(
item.flags() & ~QtCore.Qt.ItemIsUserCheckable)
item.setExpanded(expanded)
return item
def handleItemChanged(self, item, column):
if item.flags() & QtCore.Qt.ItemIsUserCheckable:
path = self.getTreePath(item)
if item.checkState(0) == QtCore.Qt.Checked:
print('%s: Checked' % path)
else:
print('%s: UnChecked' % path)
def getTreePath(self, item):
path = []
while item is not None:
path.append(str(item.text(0)))
item = item.parent()
return '/'.join(reversed(path))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 250, 450)
window.show()
我想知道,我如何在所有项目中隐藏结果中的装饰器?
我知道我可以用setstylesheet隐藏并没有实际删除箭头,只是隐藏它们,如果你不小心隐藏它们会适得其反。
item.setChildPolicy(QTreeWidgetItem.DontShowIndicator)
要么删除子项,要么永久关闭它们,因为子项目(项目的子项)一旦我这样做就会消失,并且无法做任何事情......尝试过扩大,对我有用。
实际上在PyQt5中,答案并不需要在PyQt4中。
答案 0 :(得分:1)
我从这里得到了一个潜在的解决方案:How do you disable expansion in QTreeWidget/QTreeView?
按照 eyllanesc 的建议,使用 setStyleSheet 来明显地隐藏箭头装饰器:
self.tree.setStyleSheet( "QTreeWidget::branch{border-image: url(none.png);}")
然后设置:
self.tree.setItemsExpandable(False)
您可以成功隐藏和禁用箭头装饰器。
就个人而言,我在使用 QPushButton 控制 QTreeWidgetItems 的扩展时使用了这种方法。
示例代码
def __init__(self):
self.button = QtWidgets.QPushButton(text="toggle tree item")
self.button.setCheckable = True
self.button.toggled.connect(self.button_clicked)
def button_clicked(self, toggled):
self.tree_widget_item.setExpanded(toggled)