Radiobutton nicht von Anfang an aktiviert - Python3

Fragen zu Tkinter.
Antworten
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Hallo liebe Forengemeinde,

ich habe mich schon durch das Internet gewühlt, das Forum durchsucht und das OBWOHL ich ein so tolles Buch neben mir liegen habe. (Python 3 - Das umfassende Handbuch)

Ich programmiere für den Einstieg einen BMI Rechner und habe für die Auswahl zwischen männlich und weiblich 2 Radiobuttons. Diese sollen von default aus auf männlich stehen, tun sie aber nicht. Laut Buch sollten sie es aber! XD
Wenn ich mein Programm starte, dann sind beide Radiobuttons "leer" und sobald ich mit der Maus darüberfahre, sind beide mit grauen Punkten markiert. Sobald ich nun einen anklicke, ist dieser markiert und der andere nicht. Meiner Meinung nach ein merkwürdiges Verhalten.

Weiß nicht, ob es erwähnenswert ist, aber ich programmiere mit Eclipse und PyDev unter Linux Mint 15 in einer VirtualMachine.

Der Code sieht so aus:

Code: Alles auswählen

gender = ["male", "female"]
        var = tkinter.StringVar()
        var.set("male")
        
        for a in gender:
            b = tkinter.Radiobutton(self, text=a, value=a, variable=var)
            b.pack(anchor="w")
Hier auch nochmal ein Screenshot mit Code und wie das Ergebnis aussieht.

Bild

Es wäre mir eine große Freude, wenn mir jemand helfen kann.

Liebe Grüße

Christopher
Zuletzt geändert von CrisBee am Dienstag 10. Dezember 2013, 12:52, insgesamt 2-mal geändert.
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Na super, das ist ja mal wieder typisch. Kaum postet man seine Frage und testet weiter rum, kommt man selbst auf die Lösung. Allerdings würde ich mich jetzt darüber freuen, wenn mir jemand sagen kann, WARUM es jetzt funktioniert.

Ich habe den Code durch das hier ersetzt, was erst auch nicht funktionierte. Erst als ich var zu self.var gemacht habe, ging es wie durch ein Wunder:

Code: Alles auswählen

self.var = tkinter.StringVar()
        self.var.set("male")

        self.rdbm = tkinter.Radiobutton(self, text="Male", value="male", variable=self.var)
        self.rdbf = tkinter.Radiobutton(self, text="Female", value="female", variable=self.var)
        
        self.rdbm.pack()
        self.rdbf.pack()
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi CrisBee

Wenn 'var' in einer Funktion oder Methode steht muss es ein Objekt referzieren. Als Referenz könnte auch die Instanz des Radiobutton-Widgets verwendet werden. Da du aber 'var' für beide Radiobutton-Widgets benötigst würde ich es an die Klasse binden in der sich 'var' befindet. In deinem Fall also:

Code: Alles auswählen

self.var = tk.StringVar()
Dann kanst du es auch so schreiben:

Code: Alles auswählen

    def create_widgets(self):
        gender = ["male", "female"]
        self.var = tkinter.StringVar()
        self.var.set("male")
       
        for a in gender:
            b = tkinter.Radiobutton(self, text=a, value=a, variable=self.var)
            b.pack(anchor="w")
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Danke wuf, für deine Erläuterung, warum das so ist. Ich muss noch viel lernen! :D
Das Buch ist zwar dick, aber kann leider nicht alle Bereiche detailliert abdecken. Recherchiere deshalb auch öfter noch im Netz, aber in dem Punkt war es erstmal auch nicht vom Erfolg gekrönt! *g*
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
BlackJack

@CrisBee: Bei dem Buch war übrigens zumindest die Vorgängerversion für Python 2 nicht so besonders. Insbesondere objektorientierte Programmierung sollte man aus dem nicht lernen weil das teilweise nicht „pythonisch” und teilweise falsch war.
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Hm...habe mir jetzt das "aktuelle" mit Python3 zugelegt. Man liest irgendwie über jedes Python Buch schlechtes, wenn ich ehrlich bin. Leider, so ist zumindest mein Empfinden, ist Python 3 im Netz schlecht dokumentiert, bzw ich konnte für mich nicht das passende Wissen herausziehen. Vieles ist doch noch für Python 2.x.x oder ein Misch Masch aus 2 und 3 und was weiß ich...

An sich bin ich mit dem Buch bisher zufrieden, merke aber an der einen oder anderen Stelle schon, dass man es hätte besser schreiben können. Bin dennoch froh, etwas "in der Hand" zu haben, wo man mal nachschlagen kann.
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
BlackJack

@CrisBee: Mal abgesehen von `str`/`unicode` vs. `bytes`/`str` unterscheiden sich Python 2 und 3 doch nur sehr marginal. Und ich möchte wetten, dass ein Diff zwischen dem „Umfassenden Handbuch” für die beiden Versionen nicht besonders viele relevante Unterschiede zeigen würde. Das was ich bisher gesehen habe macht eher den Eindruck dass sie so wenig wie möglich Arbeit in die Konvertierung gesteckt haben. Das geht soweit, dass sie statt den `thread`-Moduls, was man in Python 2 schon nicht mehr hätte verwenden sollen zu dem Zeitpunkt als das Buch für Python 2 heraus kam, jetzt das `_thread`-Modul verwenden, was ein absolutes „no go” ist, weil es gar nicht Teil der öffentlichen API ist, also nicht einmal existieren muss. Dabei wäre es so einfach gewesen das Kapitel einfach zu streichen.
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Hm, klingt schon sehr negativ jetzt...aber naja, Buch ist jetzt schon gekauft und wird wohl iwie seinen Dienst tun! *g* Ansonsten gibt es ja noch dieses super Forum hier!^^
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
Antworten