Radiobuttons mit matplotlib

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Grunzer
User
Beiträge: 4
Registriert: Freitag 15. August 2008, 12:49

Radiobuttons mit matplotlib

Beitragvon Grunzer » Freitag 15. August 2008, 13:21

Hallo Allerseits!

Mit Hilfe von Matplotlob kann man auch Radiobuttons benutzen (http://matplotlib.sourceforge.net/matplotlib.widgets.html). Allerdings gelingt es mir nicht den aktuellen Status des Radiobuttons bzw. welche Auswahlmöglichkeit aktiviert ist abzurufen.

Code: Alles auswählen

from pylab import *
from matplotlib.widgets import RadioButtons

rax = axes([0.025, 0.5, 0.15, 0.15], axisbg=axcolor)
radio = RadioButtons(rax, ('red', 'blue', 'green'), active=0)
def Aktion(label):
    print label
radio.on_clicked(Aktion)


Bei diesem Beispielcode kann man nur beim Drücken eines Radiobuttons sofort eine Aktion ausführen. Allerdings ist es nicht möglich das label des gedrücktn Radiobuttons "label" einer globalen Variable zu übergeben.

Wär super, wenn mir jemand helfen kann.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Re: Radiobuttons mit matplotlib

Beitragvon CM » Freitag 15. August 2008, 13:43

Hallo und willkommen im Forum,

Das verstehe ich nicht:
Grunzer hat geschrieben: Allerdings ist es nicht möglich das label des gedrücktn Radiobuttons "label" einer globalen Variable zu übergeben.

Mal abgesehen davon, dass Dein Snippet nicht funktioniert, wird ein String übergeben. Und diesen kannst Du beispielsweise dazu verwenden, um Deinen Plot zu färben. Oder Du entscheidest Dich, je nach übergebenem String, eine bestimmte Aktion auszuführen.
Dein 'Aktion()' entspricht also 'colorfunc()' im Beispiel.

Vielleicht magst Du Deine Frage mal anders formulieren?

Und im Übrigen würde ich überhaupt nicht mit globalen Variablen arbeiten wollen - keine gute Idee.

Gruß,
Christian
Grunzer
User
Beiträge: 4
Registriert: Freitag 15. August 2008, 12:49

Beitragvon Grunzer » Freitag 15. August 2008, 14:33

Ich möchte nicht sofort, wenn der Radiobutton gedrückt wird, sondern erst später, wenn ich zum Beispiel auf einen normalen Button drücke, eine Aktion entsprechend der Radiobuttonauswahl durchführen.

Zum Beispiel wäre dies das plotten der Farbe im Beispiel. Ich weiß aber nicht, wie ich diesen String, der bei radio.on_clicked übergeben wird, bei einer anderen Routine benutzen kann.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Freitag 15. August 2008, 15:28

Ah, jetzt hab' ich's! Kapiere, etwas unorthodox, aber:

Code: Alles auswählen

from pylab import *
from matplotlib.widgets import RadioButtons

t = arange(0.0, 2.0, 0.01)
s0 = sin(2*pi*t)
ax = subplot(111)
l, = ax.plot(t, s0, lw=2, color='red')

states = {}

rax = axes([0.025, 0.5, 0.15, 0.15], axisbg='white')
radio = RadioButtons(rax, ('red', 'blue', 'green'), active=0)

def Aktion(label):
    l.set_color(label)
    draw()
    states['current_label'] = label
radio.on_clicked(Aktion)
show()
print states['current_label']


D.h. Du mußt denn den Zustand von 'current_label' abfragen. Das dict kann natürlich noch viel mehr Schlüssel für alle Deine anderen Buttonzustände haben.

Gruß,
Christian
Grunzer
User
Beiträge: 4
Registriert: Freitag 15. August 2008, 12:49

Beitragvon Grunzer » Freitag 15. August 2008, 20:55

Echt toll, jetzt klappt's. Vielen Dank, ich hatte schon ewig dran rumprobiert und war kurz vorm Aufgeben, bis mir die Idee kam, mal im Forum zu fragen.

Gruß,
Matti

Wer ist online?

Mitglieder in diesem Forum: Holger Chapman