【问题标题】:A many checkbox to each label每个标签的多个复选框
【发布时间】:2020-07-15 02:50:57
【问题描述】:

如果点击了任何复选框,则只有第 100 个标签更改为“ok”。 尽管如此,如果每个复选框都单击了,则需要将上面的每个数字标签更改为“ok”(1:1)。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class app(QWidget):
    def __init__(self):
        super().__init__()
        self.ui()

    def ui(self):
        self.setGeometry(100, 100, 1000, 500)
        self.setWindowTitle('aaa')

        for i in range(10):
            for j in range(10):
                self.lb = QLabel(str(i * 10 + j + 1), self)
                self.lb.move(50 * j + 10, 50 * i + 10) 
                self.cb = QCheckBox(None, self)
                self.cb.move(50 * j + 10, 50 * i + 25)
                self.cb.stateChanged.connect(self.change)

        self.show()

    def change(self):
        self.lb.setText('ok')

if __name__ == '__main__':
    a = QApplication(sys.argv)
    ex = app()
    sys.exit(a.exec_())     

【问题讨论】:

  • 我不懂你,你自己解释清楚。你的目标是什么?

标签: python pyqt pyqt5


【解决方案1】:

您需要链接 QCheckBox/QLabel 对并在 change() 函数中使用 sender()

class app(QWidget):
    def __init__(self):
        super().__init__()
        self.ui()

    def ui(self):
        self.setGeometry(100, 100, 1000, 500)
        self.setWindowTitle('aaa')

        for i in range(10):
            for j in range(10):
                lb = QLabel(str(i * 10 + j + 1), self)
                lb.move(50 * j + 10, 50 * i + 10) 
                cb = QCheckBox(None, self)
                cb.move(50 * j + 10, 50 * i + 25)
                cb.stateChanged.connect(self.change)
                cb.label = lb

        self.show()

    def change(self):
        self.sender().label.setText('ok')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2019-02-16
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多