import sys,random
from PyQt5.QtWidgets import QApplication,QTreeWidgetItem,QTreeWidget,QHeaderView,QWidget,QLineEdit
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
class TreeWidget(QWidget):
def __init__(self):
super(). __init__()
self.setWindowTitle("List Box Samples")
self.TreeWidget = QTreeWidget(self)
self.TreeWidget.resize(600,700)
ch_font = QFont()
ch_font.setBold(True)
ch_font.setPointSize(12)
self.TreeWidget.setColumnCount(2)
self.TreeWidget.setHeaderLabels([' Test1 ',' Test2 '])
self.TreeWidget.setAlternatingRowColors(True)
self.TreeWidget.header().setDefaultAlignment(Qt.AlignCenter)
self.TreeWidget.header().setFont(ch_font)
self.TreeWidget.header().setSectionResizeMode(0, QHeaderView.ResizeToContents)
self.TreeWidget.header().setSectionResizeMode(1, QHeaderView.ResizeToContents)
self.TreeWidget.setFont(ch_font)
a = random.randint(1,2)
for i in range(5):
item = QTreeWidgetItem(self.TreeWidget)
item.setText(0,"Test root")
item.setText(1,"Test str")
for i in range(10):
child_item = QTreeWidgetItem(item)
child_item.setCheckState(0,Qt.Checked)
child_item.setText(0,str(i))
child_item.setText(1,"Test"+str(i))
if __name__ == "__main__":
app = QApplication(sys.argv)
win = TreeWidget()
win.show()
sys.exit(app.exec_())
我只想禁用检查状态列。 child_item = QTreeWidgetItem()本身没有setDisabled的功能。此外,child_item.setText(0,Qt.Unchecked) 没有禁用功能。 我很感激
child_item.setDisabled(True)
整行禁用
Qt 为其基本模型/视图对提供 更高级别 项目视图类。这些类用于基本使用和交互(对于用户和编程方面)。
QTreeWidget 项目自动在
whole行上设置一个
Qt.ItemIsUserCheckable
标志,只要在项目上显式调用setCheckState
。
不幸的是,这有一个缺点:它会自动使选中的项目uncheckable.
假设您只想显示单个列的已选中项目,解决方案非常简单:unset项目的
Qt.ItemIsUserCheckable
标志;这不会阻止视图显示复选框,但会阻止用户更改其值:
# ...
for i in range(10):
child_item = QTreeWidgetItem(item)
child_item.setCheckState(0,Qt.Checked)
child_item.setFlags(child_item.flags() & ~Qt.ItemIsUserCheckable)
# ...
我强烈建议您仔细阅读(并耐心学习和试验)有关 Qt model/view programming 的整个文档,以便更好地理解整个系统的工作原理。