更新网格中各个行的标签的按钮

问题描述:

我有一个2列3行的QGrid。第一列由QPushButton组成,第二列由QLabel's组成。 按钮=> [“This Button”,“That Button”,“A Button”]。所有标签从文本开始0.按下连续按钮应改变同一行中标签的文本(编号),方法是加上1.更新网格中各个行的标签的按钮

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

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

+0

您可以通过先写入一行代码来创建所有这些行。这很简单。 –

有几种方法来解决它,我会显示一些:

  1. 拉姆达functios:

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)) 
    
开始=>
+0

谢谢你的帮助!真正聪明的解决方案! – ZeZe