如何解决如果单击一组复选框中的任何一个,PyQt6 如何触发操作?
我在 qgroupbox 内的 QVBoxLayout 内的 qgridLayout 中有九个 QCheckBox,并且我在 qgroupbox 中定义了一个函数,该函数更新 QVBoxLayout 内的 QScrollArea,并且我希望该函数在单击任何复选框组时执行.
如何完成上述任务?我只知道 .stateChanged
和 .clicked
信号,我必须创建九个连接吗?
这是示例代码:
class Filterarea(qgroupbox):
def __init__(self):
super().__init__()
self.vBox = QVBoxLayout(self)
self.vBox.setAlignment(ALIGNMENT)
self.titleBar = QHBoxLayout()
self.title = Label('Filter')
self.titleBar.addStretch()
self.titleBar.addWidget(self.title)
self.titleBar.addStretch()
self.label = Label('By:')
self.checkBoxArea = qgridLayout()
self.checkBoxs = dict()
for i in [
'Artist','Title','Downloaded','Instrumental','Language','Genre','Style','ArtistGender','ArtistCount'
]:
self.checkBoxs.update({i: CheckBox(i)})
self.values = list(self.checkBoxs.values())
for i,item in enumerate(self.values):
y = i // 3
x = i - 3 * y
self.checkBoxArea.addWidget(item,y,x)
self.checkBoxArea.setVerticalSpacing(4)
self.vBox.addLayout(self.titleBar)
self.vBox.addWidget(self.label)
self.vBox.addLayout(self.checkBoxArea)
self.scrollArea = QScrollArea(self)
self.scrollArea.setWidgetResizable(True)
self.scrollAreaWidget = QWidget()
self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBaralwaysOn)
self.scrollArea.setWidget(self.scrollAreaWidget)
self.scrollArea.setAlignment(ALIGNMENT)
self.scrollAreaLayout = QVBoxLayout(self.scrollAreaWidget)
self.vBox.addWidget(self.scrollArea)
self.setContentsMargins(3,20,3,3)
self.appliedFilters = []
def updatefilter(self):
for item in self.values:
if item.checkState() == Qt.CheckState.Checked:
filter = Filter(item.text,'search')
self.appliedFilters.append(item)
self.scrollAreaLayout.addWidget(filter)
else:
index = self.appliedFilters.index(item)
layoutItem = self.scrollAreaLayout.itemAt(index)
widget = layoutItem.widget()
self.scrollAreaLayout.removeItem(layoutItem)
self.scrollAreaLayout.removeWidget(widget)
如何让函数在单击任何复选框时运行,并消除 for 循环的需要,使函数自动知道单击了哪个复选框?
我试过 @pyqtSlot(QCheckBox)
和 def onItemClicked(self,item)
都无济于事。
我在谷歌上搜索过这个,而且真的谷歌从来没有找到你真正想要的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。