gpt4 book ai didi

python - 删除元素后刷新 QListWidget

转载 作者:行者123 更新时间:2023-11-30 23:00:51 25 4
gpt4 key购买 nike

删除QListWidget中的一项后,我在更新它时遇到了一些问题。

这是代码的一部分:

class Window(QMainWindow):
list_1 = [] #The items are strings
list_2 = [] #The items are strings

def __init__(self):
#A lot of stuff in here

def fillLists(self):
#I fill the lists list_1 and list_2 with this method

def callAnotherClass(self):
self.AnotherClass().exec_() #I do this to open a QDialog in a new window

class AnotherClass(QDialog):
def __init__(self):
QDialog.__init__(self)

self.listWidget = QListWidget()

def fillListWidget(self):
#I fill self.listWidget in here

def deleteItems(self):
item_index = self.listWidget.currentRow()
item_selected = self.listWidget.currentItem().text()

for index, content in enumerate(Window.list_2):
if content == item_selected:
del Window.list_2[index]
break

使用deleteItems方法删除项目后,我想立即在QListWidget中查看列表的剩余项目。换句话说,我需要在按下“删除”按钮后立即从列表中删除该项目。

我在中断调用后尝试使用 update()repaint(),但它不起作用。

我该怎么做?希望你能帮助我。

------------编辑----------------

如果我关闭QDialogQListWidget就会更新。当我再次打开它时,我没有看到我删除的项目。因此,列表正在更新,但 QDialog 仍处于打开状态。

最佳答案

问题在于您正在从用于填充QListWidget的列表中删除该项目。当您首次创建 QListWidget 时,Qt 会在内部存储数据的副本。更新原始源不会从 QListWidget 中删除该项目。但是,当您关闭并重新打开该对话框时,QListWidget 会重新创建,因此您会看到正确的数据(因为它是从源有效地重新加载的)。

您应该使用QListWIdget.takeItem()删除您想要的行。对于您的情况,这是:

item_index = self.listWidget.currentRow()
self.listWidget.takeItem(item_index)

您仍应按照当前代码从源列表 (Window.list_2) 中删除该项目。

关于python - 删除元素后刷新 QListWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com