【问题标题】:how to add a QListWidgetItem on top of the QListWidget?如何在 QListWidget 上添加 QListWidgetItem?
【发布时间】:2017-12-28 17:10:19
【问题描述】:

我正在尝试创建类似于您通常在大多数图像编辑器软件中看到的图层编辑器,为此我需要在QListWidget 顶部添加新图层,我的代码目前正在尝试的是这个:

def new_layer(self):

    layer = Layer(layer_name="Layer %d" % self.number_of_layers)
    layer_item = QListWidgetItem(self)
    layer_item.setSizeHint(layer.sizeHint())

    if self.number_of_layers % 2 == 0:
        layer_item.setBackground(Qt.darkGray)
    else:
        layer_item.setBackground(Qt.gray)

    self.setItemWidget(layer_item, layer)
    self.insertItem(0, layer_item)

    self.number_of_layers += 1

即使在第 0 行插入 QListWidgetItem 后,当添加新图层时,它也会显示在之前创建的第一个图层下方。我能做些什么来解决它?

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qlistwidget


    【解决方案1】:

    根据docs

    QListWidgetItem::QListWidgetItem(QListWidget * parent = 0, int type = 类型)

    构造一个指定类型的空列表小部件项 给定的父母。如果未指定父项,则该项目将需要 插入到带有QListWidget::insertItem().的列表小部件中

    此构造函数将项目插入到父模型中 传递给构造函数。如果模型是排序的,那么 插入未确定,因为模型将调用“QListWidget::insertItem()。

    从上面得出的结论是,您不应该将父级传递给QListWidgetItem,因此您的代码应如下所示:

    def new_layer(self):
    
        layer = Layer(layer_name="Layer %d" % self.number_of_layers)
        layer_item = QListWidgetItem() #remove self
        layer_item.setSizeHint(layer.sizeHint())
    
        if self.number_of_layers % 2 == 0:
            layer_item.setBackground(Qt.darkGray)
        else:
            layer_item.setBackground(Qt.gray)
    
        self.insertItem(0, layer_item)
        self.setItemWidget(layer_item, layer)
    
    
        self.number_of_layers += 1
    

    【讨论】:

    • 我只对您的答案进行了一次更改以使其正常工作,我已将 self.setItemWidget(layer_item, layer) 行与 self.insertItem(0, layer_item) 行交换,现在它可以正常工作期待,感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2011-05-11
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多