У меня возникли проблемы с обновлением QListWidget
после удаления его элемента.Обновите 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
, я хочу, чтобы увидеть остальные элементы списка inmediately в QListWidget
. Другими словами, мне нужно удалить элемент из списка, как только я нажму кнопку «Удалить».
Я пробовал с update()
и repaint()
после перерыва, но он не работает.
Как я могу это сделать? Надеюсь, ты поможешь мне.
------------ Edit ---------------
QListWidget
обновляется, если я закрыть QDialog
. Когда я снова открою его, я не вижу элемент, который я удалил. Таким образом, список обновляется, но не в то время как QDialog
все еще открыт.
Честно говоря, вам не нужно называть 'repaint()'. Также в вашем коде я не вижу ни одного вызова 'update()' (именно это вам и нужно). Если он не работает, вы всегда можете воссоздать 'QListWidget' и заменить (удалить старый, а затем добавить новый) текущий с новым. – rbaleksandar
Благодарим вас за ответ. Я стирал строку 'update' (ниже' break'call), прежде чем вставлять код здесь. Вы имеете в виду, что мне, возможно, придется удалить список после вызова «break» и создать еще один? –
Хорошо. Что касается отдыха 'QListWidget' - на самом деле. Я бы предположил, что вы скорее удаляете все нужные вам элементы и в конце воссоздаете и снова присоединяете вновь созданный виджет. Из вашего редактирования я бы предложил добавить сигнал, который испускается всякий раз, когда список изменяется, и он войдет в слот самого QDialog, который обновит его (через 'update()', если он работает, или через отдых и перезагрузку 'QListWidget '). Таким образом, диалог будет уведомлен об изменениях. Также см. [Здесь] (http://stackoverflow.com/a/28540716/1559401) для примера с помощью repaint(). – rbaleksandar