所以我的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(" ")
这里的问题是
由于该视图,它不会删除以前的值。结果就是照片中这样的东西。
到目前为止我尝试过的事情:
但是我不确定如何实现#2。我的完整代码可以在 so_revision.py 文件
中看到here答案 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(" ")