用于更新每个相应行的网格中的标签的按钮

时间:2017-11-17 23:50:08

标签: python python-3.x pyqt pyqt4

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

以上是问题的简化版本,实际上我有10行以上,5列以上。

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

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决它,我将展示一些:

  1. lambda functios:
  2. 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. 字典
    2. 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))