2016-09-10 10 views
2

Sirs.Zugriff auf dynamisch erstellte Schaltflächen in PyQT5

Ich habe ziemlich einfach PyQT5 App. Ich habe dynamisch Schaltflächen erstellt und mit einigen Funktionen verbunden.

class App(QWidget): 
     ... 
     def createButtons(self): 
      ... 
      for param in params: 
       print("placing button "+param) 
       button = QPushButton(param, checkable=True) 
       button.clicked.connect(lambda: self.commander()) 

Und ich habe den Kommandanten Methode:

def commander(self): 
     print(self.sender().text()) 

So habe ich Zugriff auf geklickt Taste. Aber was, wenn ich auf zuvor geklickte Schaltfläche zugreifen möchte? Oder ein anderes Element im Hauptfenster? Wie es geht?

Was ich will:

def commander(self): 
     print(self.sender().text()) 
     pressedbutton = self.findButtonByText("testbutton") 
     pressedbutton.setChecked(False) 

Oder

 pressedbutton = self.findButtonBySomeKindOfID(3) 
     pressedbutton.setChecked(False) 

Jede Hilfe wird geschätzt!

Antwort

0

Sie können eine Karte verwenden und die Instanzen Ihrer Schaltflächen speichern. Sie können den Schaltflächentext als Schlüssel oder die ID verwenden, wenn Sie möchten. Wenn Sie den Schaltflächentext als Schlüssel verwenden, können Sie nicht zwei Schaltflächen mit demselben Label haben.

class App(QWidget): 

    def __init__(self): 
     super(App,self).__init__() 
     button_map = {} 
     self.createButtons() 

    def createButtons(self): 
     ... 
     for param in params: 
      print("placing button "+param) 
      button = QPushButton(param, checkable=True) 
      button.clicked.connect(lambda: self.commander()) 
      # Save each button in the map after the setting of the button text property 
      self.saveButton(button) 

    def saveButton(self,obj): 
     """ 
     Saves the button in the map 
     :param obj: the QPushButton object 
     """ 
     button_map[obj.text()] = obj 

    def findButtonByText(self,text) 
     """ 
     Returns the QPushButton instance 
     :param text: the button text 
     :return the QPushButton object 
     """ 
     return button_map[text] 
+0

Vielen Dank, Sir! –

+0

Gern geschehen! Wenn Sie dank dieser Antwort die Lösung Ihres Problems gefunden haben, vergessen Sie nicht, sie zu akzeptieren! –

+0

Ihr Rat war sehr hilfreich. Es funktioniert jetzt. Danke noch einmal! –

Verwandte Themen