删除元素后刷新 QListWidget
Refresh a QListWidget after deleting elements
我在删除项目后 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
中看到列表的剩余项目。换句话说,我需要在按下按钮 "Delete".
后立即从列表中删除项目
我在 break 调用后尝试使用 update()
和 repaint()
,但它不起作用。
我该怎么做?希望你能帮助我。
------------编辑--------------
如果我关闭 QDialog
,QListWidget
会更新。当我再次打开它时,我没有看到我删除的项目。因此,列表正在更新,但不会在 QDialog
仍处于打开状态时更新。
问题是您要从用于填充 QListWidget
的列表中删除项目。当您第一次创建 QListWidget
时,Qt 会在内部存储数据的 copy。更新原始来源不会从 QListWidget
中删除项目。但是,当您关闭并重新打开对话框时,会重新创建 QListWidget
,因此您会看到正确的数据(因为它实际上是从源重新加载的)。
您应该使用 QListWIdget.takeItem()
来删除您想要的行。在您的情况下,这是:
item_index = self.listWidget.currentRow()
self.listWidget.takeItem(item_index)
您仍然应该从您的源列表 (Window.list_2
) 以及您当前的代码中删除该项目。
我在删除项目后 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
中看到列表的剩余项目。换句话说,我需要在按下按钮 "Delete".
我在 break 调用后尝试使用 update()
和 repaint()
,但它不起作用。
我该怎么做?希望你能帮助我。
------------编辑--------------
如果我关闭 QDialog
,QListWidget
会更新。当我再次打开它时,我没有看到我删除的项目。因此,列表正在更新,但不会在 QDialog
仍处于打开状态时更新。
问题是您要从用于填充 QListWidget
的列表中删除项目。当您第一次创建 QListWidget
时,Qt 会在内部存储数据的 copy。更新原始来源不会从 QListWidget
中删除项目。但是,当您关闭并重新打开对话框时,会重新创建 QListWidget
,因此您会看到正确的数据(因为它实际上是从源重新加载的)。
您应该使用 QListWIdget.takeItem()
来删除您想要的行。在您的情况下,这是:
item_index = self.listWidget.currentRow()
self.listWidget.takeItem(item_index)
您仍然应该从您的源列表 (Window.list_2
) 以及您当前的代码中删除该项目。