在网格中为每个对象更新标签的按钮

2024-03-29 05:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2列3行的QGrid。第一列由QPushButtons组成,第二列由QLabel组成。 按钮=>;[“这个按钮“,”那个按钮“,”一个按钮“]。所有标签都从文本0开始。按一行中的按钮应通过添加1来更改同一行中标签的文本(编号)

上面是问题的简化版本,实际上我有10+行和5+列

如何用尽可能少的代码在网格中创建所有这些行和列?我如何将每个按钮链接到它各自的标签,而不必为每个单独的按钮创建一个函数


Tags: 函数代码文本gt版本网格链接标签
1条回答
网友
1楼 · 发布于 2024-03-29 05:24:08

有几种方法可以解决这个问题,我将展示一些:

  1. λ函数:

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        lay = QGridLayout(self)
        for i in range(3):
            btn = QPushButton("button-{}".format(i), self)
            lbl = QLabel("{}".format(0))
            lay.addWidget(btn, i, 0)
            lay.addWidget(lbl, i, 1)
            btn.clicked.connect(lambda checked, l=lbl: self.fun(l))

    def fun(self, lbl):
        n = int(lbl.text()) + 1
        lbl.setText(str(n))
  1. 字典

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        lay = QGridLayout(self)
        self.connections = {}
        for i in range(3):
            btn = QPushButton("button-{}".format(i), self)
            lbl = QLabel("{}".format(0))
            lay.addWidget(btn, i, 0)
            lay.addWidget(lbl, i, 1)
            self.connections[btn] = lbl
            btn.clicked.connect(self.fun)

    def fun(self):
        lbl = self.connections[self.sender()]
        n = int(lbl.text()) + 1
        lbl.setText(str(n))

相关问题 更多 >