2017-03-13 1 views
0

Je suis nouveau sur PyQT5 et je veux avoir plusieurs boutons et avoir le dernier cliqué dans un état "vérifié". Quand on clique sur un autre bouton, le précédent est "décoché" tandis que le clic est "vérifié".pyqt5 montre quel bouton a été cliqué

import sys 
from PyQt5.QtWidgets import * 

class Example(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(30, 30, 400, 200) 
     self.initUI() 

    def initUI(self): 
     self.button1 = QPushButton(self) 
     self.button1.setGeometry(40, 40, 100, 50) 
     self.button1.setText("Button 1") 

     self.button2 = QPushButton(self) 
     self.button2.setGeometry(150, 40, 100, 50) 
     self.button2.setText("Button 2") 

     self.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

Répondre

-1
  1. Faire les boutons cochables par setCheckable (True)
  2. Ajouter les boutons à un QButtonGroup() et le reste est trié automatiquement:

    class Example(QWidget): 
        def __init__(self): 
         super().__init__() 
         self.setGeometry(30, 30, 400, 200) 
         self.initUI() 
    
        def initUI(self): 
         self.button1 = QPushButton(self) 
         self.button1.setGeometry(40, 40, 100, 50) 
         self.button1.setText("Button 1") 
         self.button1.setCheckable(True) 
         self.button2 = QPushButton(self) 
         self.button2.setGeometry(150, 40, 100, 50) 
         self.button2.setText("Button 2") 
         self.button2.setCheckable(True) 
    
         self.my_button_group = QButtonGroup() 
         self.my_button_group.addButton(self.button1) 
         self.my_button_group.addButton(self.button2) 
    
         self.show() 
    
1

bâtiment hors de votre code, vous pouvez ajouter button1 et button2 à un QButtonGroup avec la propriété exclusive définie sur True.

class Example(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(30, 30, 400, 200) 
     self.initUI() 

    def initUI(self): 
     self.button1 = QPushButton(self) 
     self.button1.setGeometry(40, 40, 100, 50) 
     self.button1.setText("Button 1") 

     self.button2 = QPushButton(self) 
     self.button2.setGeometry(150, 40, 100, 50) 
     self.button2.setText("Button 2") 

     self.btn_grp = QButtonGroup() 
     self.btn_grp.setExclusive(True) 
     self.btn_grp.addButton(self.button1) 
     self.btn_grp.addButton(self.button2) 

     self.btn_grp.buttonClicked.connect(self.on_click) 

     self.show() 

    def on_click(self, btn): 
     pass # do something with the button clicked 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

Ici, j'ai aussi connecté un emplacement vide au signal QButtonGroup.buttonClicked, qui est émis chaque fois qu'un bouton du groupe est cliqué.

Pour savoir quel bouton est le bouton actuellement coché, vous pouvez appeler les méthodes QButtonGroup.checkedButton() et QButtonGroup.checkedId(). Le premier renvoie un objet QButton et ce dernier renvoie un index int, correspondant à l'ordre dans lequel les boutons ont été ajoutés au groupe.