PyQT删除QVBoxLayout以适应数据库中的更新值

时间:2019-05-11 05:04:03

标签: python pyqt pyqt5

所以我的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. 获取项目及其频率,并将其放入字典中
    • 因为它只是填充数据库,所以显然没有用
  2. 有一个想法要先清除视图QVBoxLayout,以便当视图再次刷新db中的数据时,它不会显示过去的输入

但是我不确定如何实现#2。我的完整代码可以在 so_revision.py 文件

中看到here

1 个答案:

答案 0 :(得分:1)

您可以检查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(" ")