Заполнение QListWidget элементами из динамического списка

Я создал QListWidgetв QtDesigner и хочу добавить в него некоторые элементы из другого списка под названием «list_1», который я создал ранее. Дело в том, что этот список (list_1) обновляется каждый раз, когда я нажимаю комбинацию клавиш.

Вот код:

class Win(self):
  list_1 = []
  number = 0                   #This is a variable that is continuously changing
  def __init__(self):
    #Some stuff in here

  def addItem(self):
    item = "Number " + str(Win.number)
    Win.list_1.append(item)
    Win.number += 1

class Dialog(QDialog):
   def __init__(self):
     QDialog._init__(self):
     uic.loadUi("ListWidget.ui", self)

   def addItems(self):
     #I want to create this method to add the items from list_1 into the `QListWidget`

Как я могу открыть QDialog (с кнопкой, которая у меня уже есть) и увидеть в QListWidget элементы по мере их добавления в список. Я имею в виду: «Я открываю QDialog и вижу номер 1. Затем я закрываю QDialog, добавляю номер в список, и когда я снова открываю QDialog, я вижу Number 1и Number 2 и так далее.

Надеюсь, вы можете мне помочь.


person Pablo Flores    schedule 28.01.2016    source источник
comment
Обычно для этого следует использовать QListView и модель элемента, а не QListWidget. Когда вы добавляете элементы в модель, представление обновляется.   -  person Tim Wakeham    schedule 29.01.2016
comment
Спасибо за ваш ответ. Мне нужно сделать это с помощью QlistWidget, чтобы позже добавить некоторые другие функции. Я создал цикл for для i в list_1: item = QListWidgetItem(i) self.listWidget.addItem(item), но он не обновляется, когда я создаю новый элемент.   -  person Pablo Flores    schedule 30.01.2016


Ответы (1)


Если вы не собираетесь использовать архитектуру Model/View, у вас есть два варианта.

1. Создавайте/обновляйте QListWidget каждый раз, когда вы его показываете.

Если у вас нет тысяч предметов или у вас нет сложных пользовательских рисунков для каждого из предметов, это будет довольно быстро.

class Dialog(QDialog):
    def __init__(self, list_1):
        QDialog._init__(self):
        uic.loadUi("ListWidget.ui", self)
        for txt in list_1:
            QListWidgetItem(txt, self.list_widget)

2. Используйте QListWidgetItems в качестве «модели».

Даже не пытайтесь вести отдельный список. Непосредственно редактируйте QListWidgetItems в файле QListWidget. Это работает, только если вы не уничтожаете и не создаете QDialog каждый раз.

В долгосрочной перспективе, я думаю, вы обнаружите, что этот метод работает лучше. Вы будете реже сносить и обновлять графический интерфейс (а это значит, что он будет работать быстрее), и вам не придется иметь дело с ошибками, когда обновлялся список источников, но не графический интерфейс (и наоборот).

person Brendan Abel    schedule 05.02.2016
comment
Спасибо за ваш ответ. Первый проще, чем тот, который я сделал. Еще раз спасибо, это мне очень помогло. - person Pablo Flores; 05.02.2016