作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个 pyqt5 GUI,它根据保存在目录中的 JSON 文件的标题生成复选框。我的下一步是让它在用户选中一个框时删除该复选框,然后删除 JSON 文件。
目前我生成的复选框如下:
for x in self.list:
layout.addWidget(QCheckBox(x),row,0)
row+=1
由于我没有将每个复选框分配给一个对象,我将如何检查每个复选框的状态,然后为它分配一个 Action ?
因为我正在学习讨论我的想法:
我希望我可以使用 Signals 来检测信号何时从整个小部件传输,然后使用删除目录中与生成信号的对象共享名称的任何文件的函数插入它。
是否还有更好的方法来生成复选框?
最佳答案
要存储小部件以便稍后您可以访问它们,请创建一些容器,List
将完美地完成:
self.checkboxes = []
...
checkbox = QCheckBox("Iam checkbox number: {}".format(len(self.checkboxes))) #Create checkbox
self.vbox.addWidget(checkbox) #Add it to layout
self.checkboxes.append(checkbox) #Store it for later use in List
要删除它们,您可以使用 .deleteAfter()
方法:
self.checkboxes[-1].deleteLater() #[-1] gives us the last element and .deleteLater() gets rid of the widget GUI wise.
self.checkboxes.pop() #Then we just remove the last element from the list so it doesn't take space
这是整个工作示例:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QCheckBox, QVBoxLayout
class App(QWidget):
def __init__(self):
super().__init__()
self.width = 320
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle("My app")
self.vbox = QVBoxLayout()
self.vbox.addStretch(1)
cr_button = QPushButton('Press to add widgets')
cr_button.clicked.connect(self.create)
del_button = QPushButton('Press to delete widgets')
del_button.clicked.connect(self.delete)
self.vbox.addWidget(cr_button)
self.vbox.addWidget(del_button)
self.checkboxes = []
self.setLayout(self.vbox)
self.show()
def create(self):
checkbox = QCheckBox("Iam checkbox number: {}".format(len(self.checkboxes)))
self.vbox.addWidget(checkbox)
self.checkboxes.append(checkbox)
self.show()
def delete(self):
self.checkboxes[-1].deleteLater()
self.checkboxes.pop()
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
关于python - 如何删除动态生成的复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65849614/
我是一名优秀的程序员,十分优秀!