2016-08-08 6 views
0

Ich habe eine Schaltfläche klicken, dass ich Ereignisse ändern möchte, wenn die Taste gedrückt wird. Eine minimale Version des vorhandenen Code sieht wie folgt aus:pyqt4: Wie ändert man ein Button-Event, ohne ein neues Event hinzuzufügen?

# Event that happens the first time 
def first_event(self): 
    button.setText("Second Event") 
    button.clicked.connect(second_event) 

# Event that happens the second time 
def second_event(self): 
    button.setText("First Event") 
    button.clicked.connect(first_event) 

button = QtGui.QPushButton("First Event") 
button.clicked.connect(first_event) 

Leider statt Ändern das Ereignis, das es passiert, einfach fügt und Ereignis zum geklickt Signal, was bedeutet, dass das passiert folgendes:

Erste-Taste drücken - ruft first_event

Second-Taste drücken - ruft first_event und second_event

Thi rd Taste drückt - ruft first_event zweimal und second_event

etc ...

Mein gewünschtes Verhalten wäre es, die Taste Änderungsfunktionen zu haben, wenn es gedrückt wird, so dass das resultierende Verhalten sei:

Erste-Taste drücken - ruft first_event

Second-Taste drücken - ruft second_event

dritte Taste drücken - ruft first_event

etc ...

Gibt es eine Möglichkeit, es zu machen, so dass es das Click-Ereignis ändert, statt einen neuen hinzuzufügen? Gibt es eine Möglichkeit, Ereignisse nach der Tat zu entfernen?

+0

Sie sollten versuchen zu erklären, welches spezifische Problem Sie damit lösen möchten. Es ist aller Wahrscheinlichkeit nach nicht der richtige Weg. – ekhumoro

+0

Alles, was ich will, ist eine Schaltfläche, die Funktionen ändert, wenn sie angeklickt wird. Stellen Sie sich eine Wiedergabetaste auf einer TV-Fernbedienung vor: Wenn Sie sie einmal drücken, wird sie abgespielt, aber wenn Sie sie erneut drücken, wird sie angehalten. Es ändert seine Verwendung, wenn es gedrückt wird. –

+0

In diesem Fall brauchen Sie nur ein einfaches Flag, um den aktuellen Status zu speichern. – ekhumoro

Antwort

1

Ich fand eine Möglichkeit, alte Ereignisse von Signalen zu trennen, die die disconnect() Methode verwenden. Hier ist eine bearbeitete Version, das erreicht, was ich ursprünglich machen wollte:

# Event that happens the first time 
def first_event(self): 
    button.setText("Second Event") 
    button.clicked.disconnect() 
    button.clicked.connect(second_event) 

# Event that happens the second time 
def second_event(self): 
    button.setText("First Event") 
    button.clicked.disconnect() 
    button.clicked.connect(first_event) 

button = QtGui.QPushButton("First Event") 
button.clicked.connect(first_event) 

Es ist erwähnenswert, dass, anstatt dies zu tun, ich schließlich tat, was ekhumoro in den Kommentaren erwähnt, und erstellt eine Wrapper-Funktion mit einer Flagge aufnehmen der aktuelle Zustand, und dann first_event() oder second_event() basierend auf dem Wert des Flags aufrufen.

Verwandte Themen