pyqt5动态生成QCheckBox并将动作连接到新元素

时间:2018-05-26 03:05:49

标签: python python-3.x pyqt5 qtwidgets

我目前正在使用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

因此,我只有最后一个添加到窗口的按钮才能使复选框正常工作。如果你们都能为我提供任何指示,我将非常感激。

0 个答案:

没有答案