如何仅禁用 pyside6 QTreeWidget 中的复选框列?

问题描述 投票:0回答:1
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)

整行禁用

pyside6 qtreewidget
1个回答
0
投票

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 的整个文档,以便更好地理解整个系统的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.