简体   繁体   English

QTreeWidget PyQt 中出现的额外行

[英]Extra row appearing in QTreeWidget PyQt

I've a piece of code in which I've added two sub-items to a QTreeWidget parent item.我有一段代码,其中我向QTreeWidget父项添加了两个子项。 The sub-items are set to be "editable".子项设置为“可编辑”。

I'm facing two problems here:我在这里面临两个问题:

  1. There appears an extra row with empty editable items.会出现一个额外的行,其中包含空的可编辑项。 (I want "Min" and "Max" in the same row) (我希望“Min”和“Max”在同一行)

在此处输入图片说明

  1. If I change an editable item to an empty string then it appears as if there is nothing, I would like to have some sort of a highlighter that there is an empty field in here(some sort of a box)如果我将可编辑项更改为空字符串,那么它看起来好像什么都没有,我想要某种荧光笔,这里有一个空字段(某种盒子)

在此处输入图片说明

How can I get around these issues?我怎样才能解决这些问题?

Code:代码:

import sys
from PyQt5.QtCore import *
from PyQt5 import QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.FilterList = QTreeWidget()
        self.setCentralWidget(self.FilterList)
        self.setWindowTitle("Form")
        self.setGeometry(50,50,800,500)
        self.generateData()

    def generateData(self):
        self.FilterList.setColumnCount(3)
        self.FilterList.setHeaderLabels(["Filter Questions"])
        DifficultyNode = QTreeWidgetItem(["Difficulty"])
        self.FilterList.addTopLevelItem(DifficultyNode)
        self.FilterList.itemChanged.connect(self.handleItemChanged)
        EasyNode = QTreeWidgetItem(["Easy"])
        EasyNode.setCheckState(0, Qt.Unchecked)
        NormalNode = QTreeWidgetItem(["Normal"])
        NormalNode.setCheckState(0, Qt.Unchecked)
        HardNode = QTreeWidgetItem(["Hard"])
        HardNode.setCheckState(0, Qt.Unchecked)
        HardNode.setFlags(HardNode.flags() | QtCore.Qt.ItemIsEditable)
        MinNode = QTreeWidgetItem()
        MinNode.setText(1, "Min")
        MinNode.setFlags(MinNode.flags() | QtCore.Qt.ItemIsEditable)
        MaxNode = QTreeWidgetItem()
        MaxNode.setText(2, "Max")
        MaxNode.setFlags(MaxNode.flags() | QtCore.Qt.ItemIsEditable)
        
        DifficultyNode.addChild(EasyNode)
        EasyNode.addChild(MinNode)
        EasyNode.addChild(MaxNode)
        DifficultyNode.addChild(NormalNode)
        DifficultyNode.addChild(HardNode)
        

    def handleItemChanged(self, item, column):
        if item.checkState(column) == QtCore.Qt.Checked:
            print('Item Checked', item.text(column))
        elif item.checkState(column) == QtCore.Qt.Unchecked:
            print('Item Unchecked', item.text(column))

def main():
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

main()

Use only one QTreeWidgetItem and set the text for both columns.仅使用一个 QTreeWidgetItem 并为两列设置文本。

MinNode = QTreeWidgetItem()
MinNode.setText(1, "Min")
MinNode.setText(2, "Max")
MinNode.setFlags(MinNode.flags() | QtCore.Qt.ItemIsEditable)
EasyNode.addChild(MinNode)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM