Seite 1 von 1
Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Dienstag 10. Dezember 2013, 10:59
von CrisBee
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.
Es wäre mir eine große Freude, wenn mir jemand helfen kann.
Liebe Grüße
Christopher
Re: Radiobutton - Python 3
Verfasst: Dienstag 10. Dezember 2013, 12:51
von CrisBee
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()
Re: [gelöst] Radiobutton nicht von Anfang an aktiviert - Pyt
Verfasst: Mittwoch 11. Dezember 2013, 10:04
von wuf
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:
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

Re: Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Mittwoch 11. Dezember 2013, 11:16
von CrisBee
Danke wuf, für deine Erläuterung, warum das so ist. Ich muss noch viel lernen!

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*
Re: Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Mittwoch 11. Dezember 2013, 11:23
von 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.
Re: Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Mittwoch 11. Dezember 2013, 11:42
von CrisBee
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.
Re: Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Mittwoch 11. Dezember 2013, 11:59
von 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.
Re: Radiobutton nicht von Anfang an aktiviert - Python3
Verfasst: Mittwoch 11. Dezember 2013, 12:04
von CrisBee
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!^^