2017-11-17 248 views
0

我有一個2列3行的QGrid。第一列由QPushButton組成,第二列由QLabel's組成。 按鈕=> [「This Button」,「That Button」,「A Button」]。所有標籤從文本開始0.按下連續按鈕應改變同一行中標籤的文本(編號),方法是加上1.更新網格中各個行的標籤的按鈕

以上是問題的簡化版本,其中實際我有10多行,5列。

如何使用盡可能少的代碼在網格中創建所有這些行和列?如何將每個按鈕鏈接到相應的標籤,而無需爲每個單獨的按鈕創建一個功能?

+0

您可以通過先寫入一行代碼來創建所有這些行。這很簡單。 –

回答

1

有幾種方法來解決它,我會顯示一些:

  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)) 
  • 字典

  • 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