PyQT Удаление QVBoxLayout для размещения обновленных значений из БД - PullRequest
1 голос
/ 11 мая 2019

Итак, у меня проблема с моим интерфейсом PyQT5, заключающаяся в том, что при загрузке значений из базы данных он дублирует представление, поскольку оно зацикливается после нажатия кнопки.

Вот код, который заполняетПросмотр, когда элемент вставлен из БД, он принимает значения из БД.И отображает его через цикл.

def restart_program(self):
    total, items = fetch_items()
    for item in items:
        item = str(item[0]) + ' - ' + str(item[2]) +'x'
        self.b3 = QtWidgets.QPushButton(item)
        self.v_box.addWidget(self.b3)
        self.b3.clicked.connect(self.btn_click1)
    curr_budget = fetch_budget()
    curr_budget = curr_budget[0]
    self.message2.setText("Total: " + str(total))
    self.budget_status.setText("Budget: " + str(curr_budget))

    self.message3.setText(" ")

Проблема здесь заключается в том, что.

image

Из-за представления он не удаляетпредыдущие значения.В результате чего-то вроде этого на фотографии.

Что я пробовал до сих пор:

  1. Получение элементов и их частот и размещение их в словаре
    • Очевидно, не сделалработать как только что заполнил db
  2. ранее была идея очистить представление QVBoxLayout, чтобы, когда представление снова загружало данные из базы данных, не отображало прошлые входные данные

Но я не уверен, как реализовать # 2.Мой полный код можно увидеть здесь в so_revision.py файле

1 Ответ

1 голос
/ 11 мая 2019

Вы можете проверить, сколько элементов у вас уже есть в вашем QVBoxLayout, и удалить их (только будьте осторожны, чтобы не удалить ярлык и т. Д.), Например:

def restart_program(self):
    total, items = fetch_items()

    for i in range(1, self.v_box.count()):
        existing_item = self.v_box.itemAt(i).widget()
        if existing_item:
            existing_item.setParent(None)

    for item in items:
        item = str(item[0]) + ' - ' + str(item[2]) +'x'
        self.b3 = QtWidgets.QPushButton(item)

        self.v_box.addWidget(self.b3)
        self.b3.clicked.connect(self.btn_click1)
    curr_budget = fetch_budget()
    curr_budget = curr_budget[0]
    self.message2.setText("Total: " + str(total))
    self.budget_status.setText("Budget: " + str(curr_budget))

    self.message3.setText(" ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...