我目前正在使用PyQt5为我的应用程序开发GUI。我没有长时间使用PyQt,目前我还在学习更多。我发现了一种为指定列表中的每个元素动态创建QCheckBox并将其添加到我的QGridLayout的方法。我目前正在尝试将函数连接到每个生成的QCheckBox。我的代码如下:
import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout,
QPushButton, QApplication, QCheckBox, QButtonGroup, QAbstractButton)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def checkboxState(self,b):
if b.isChecked() == True:
print(b.text()+ " is selected")
else:
print(b.text()+ " is deselcted")
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
appList = ['Demo1','Demo2','Demo3']
for app in appList:
checkbox = QCheckBox(app)
checkbox.stateChanged.connect(lambda:self.checkboxState(checkbox))
grid.addWidget(checkbox)
self.move(300, 150)
self.setWindowTitle('Calculator')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
我的代码运行时没有丢失任何错误,但我得到一个奇怪的结果。当我在GUI窗口中选中除“Demo3”之外的任何复选框时,控制台输出将读取以下内容:
现在取消选择Demo3
当我在窗口中选择Demo3时,控制台输出会在以下内容之间交替显示:
现在选择Demo3 和 现在取消选择Demo3
因此,我只有最后一个添加到窗口的按钮才能使复选框正常工作。如果你们都能为我提供任何指示,我将非常感激。