首页 > 解决方案 > PySide:有时我删除和添加项目时 QListWIdget 项目消失

问题描述

我有一个带有自定义小部件的 QListWidget。如果我执行以下操作,我会看到一个问题:

  1. 添加两个项目
  2. 删除第二项
  3. 添加另一个项目

然后第一项的小部件内容消失,直到我调整窗口大小或添加第三项。

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class StagingWidget(QGroupBox):
    def __init__(self,parent=None):
        #QWidget.__init__(self,parent)
        super(StagingWidget,self).__init__()
        self.itemWidgets = list()
        self.count = 1  
        self.createUi()

    def createUi(self):
        self.widget_layout=QVBoxLayout(self)

        self.list_widget=QListWidget()

        self.setFixedWidth(450)
        self.setFixedHeight(600)
        self.list_widget.setStyleSheet("QListWidget::item:selected{background:lightblue}")
        self.widget_layout.addWidget(self.list_widget)
        self.buttonHLayout = QHBoxLayout()
        self.add = QPushButton("Add Item")
        self.add.clicked.connect(self.addListItem)
        self.buttonHLayout.addWidget(self.add)
        self.widget_layout.addLayout(self.buttonHLayout)

    def addListItem(self):
        itemN = QListWidgetItem()
        widget = QWidget()

        Button1 = QPushButton(str(self.count))
        Button2 =  QPushButton("Remove")
        Button2.clicked.connect(lambda item=itemN:self.removeJob(item))
        widgetLayout = QHBoxLayout()
        widgetLayout.addWidget(Button1)
        widgetLayout.addWidget(Button2)
        widget.setLayout(widgetLayout)
        itemN.setSizeHint(widget.sizeHint())    
        self.itemWidgets.append(widget)
        self.list_widget.addItem(itemN)
        self.list_widget.setItemWidget(itemN, self.itemWidgets[-1])
        self.count = self.count + 1

    def removeJob(self,item):
        print("Removing Job")
        row = self.list_widget.indexFromItem(item).row()
        self.list_widget.takeItem(row)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = StagingWidget()
    widget.show()
    sys.exit(app.exec_())  

示例:添加 1 项:

在此处输入图像描述

添加另一个项目:

在此处输入图像描述

删除第 2 项:

在此处输入图像描述

添加另一个项目(您可以看到项目 1 的小部件消失):

在此处输入图像描述

添加另一个项目(项目 1 的小部件重新出现):

在此处输入图像描述

每次我执行上述步骤时都会发生这种情况。

标签: pythonpysideqlistwidgetqlistwidgetitem

解决方案


推荐阅读