Problem mit Radiobuttons

Fragen zu Tkinter.
Antworten
Ozim
User
Beiträge: 16
Registriert: Freitag 26. Oktober 2007, 19:00

Hallo,

ich bins mal wieder. ich habe ein kleines Problem mit den Radiobuttons. Der betroffene Abschnitt sieht so aus:

Code: Alles auswählen

 
def Thema3():
    top=Toplevel()
    lab=Label(top,text='Rechnen im Dreieck')
    lab.pack(side=TOP)

    v = StringVar()
    v.set('0')
    R1 = Radiobutton(top, text="mit einem rechten Winkel", variable=v, value=1)
    R1.pack(anchor=W)
    R2 = Radiobutton(top, text="mit dem Satz des Pythagoras", variable=v, value=2)
    R2.pack(anchor=W)
    R3 = Radiobutton(top, text="mit dem Winkel-Summen-Satz", variable=v, value=3)
    R3.pack(anchor=W)
    R4 = Radiobutton(top, text="mit sinus, cosinus und tangens", variable=v, value=4)
    R4.pack(anchor=W)
    R5 = Radiobutton(top, text="Flächen-Berechnung", variable=v, value=5)
    R5.pack(anchor=W)
    
    def Dreieck_start():
        if v=="0":
            print 0
        elif v=="1":
            print '1'
        elif v=="2":
            print '2'
        elif v=="3":
            print '3'
        elif v=="4":
            print '4'
        elif v=="5":
            print '5'
        else:
            print 'x'

    def Exit():
        top.destroy()
            
    button_Dreieck_start=Button(top,text='Start', command = Dreieck_start)
    button_Dreieck_start.pack(side = BOTTOM,expand=NO)
    button_Dreieck_ende=Button(top,text='Exit', command=Exit)
    button_Dreieck_ende.pack(side = BOTTOM,expand=NO)
Das Problem: Die Radiobuttons nehmen weisen v nicht den entsprechendem Wert zu! Deshalb auch die if-konstellation. Es wird immer x gegeben.
Und um mich gleich peinigen zu lassen, ja ich habe "from Tkinter import *" verwendet, :oops: aber dadurch dürfte dieses Problem doch nicht auftauchen, oder?

Bei allen Tutorials und Foren durchsuchen habe ich nicht´s gefunden.
Habe schon

Code: Alles auswählen

    v = StringVar() 
probiert und auch:

Code: Alles auswählen

Radiobutton(top, text="mit einem rechten Winkel", variable=v, value=1).pack
vielen Dank schonmal für´s durchlesen,
Ozim *auf Hilfe hoff* :wink:
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Vlt hängt es ja nicht damit zusammen, dass der Variable kein Wert zugewiesen wird, sondern das er nicht abgefragt wird.
Lass dir doch mal ausgeben, was du da unter suchst.

Code: Alles auswählen

print v
Dann guckst du, was es ist, und vergleichst es mit dem, was es sein sollte.
Kleiner Tip:
Wenn du in Zeile 7 sagst, v soll eine StringVar sein, ist es das in Zeile 20 immernoch. Und wenn du weißt, das man den Wert mit .set() ändert, solltest du auch wissen, wie man ihn abfragt :wink:
Zudem ist deien Namensgebung nicht peppig und die Exit-Methode unvollständig (Es kann sein, das der mainloop weiter läuft und du so eine nicht abbrechbare Endlosschleife hast).
Ozim
User
Beiträge: 16
Registriert: Freitag 26. Oktober 2007, 19:00

O.o Danke für die sehr schnelle Antwort :!:

also das mit print v hatte ich schon ganz am anfang. Das komische ist das der Wert den er ausgibt "PY_VAR9" heißt :?

So zum 2ten.
stimmt ich hätte es mit .get() abfragen sollen. O.o

bei dem letzten
Zudem ist deien Namensgebung nicht peppig und die Exit-Methode unvollständig
Ja, das stimmt, aber die namensgebung is mir relativ egal ;) und das mit exit is ja noch in "entwicklung" und ich habe auch eine nicht abbrechbare Endlosschleife. :lol:

mfg Ozim
BlackJack

Irgendwie habe ich ja eine Abneigung gegen copy'n'paste Quelltexte. Hier ein Ansatz wie man das mit Schleifen etwas eindämmen kann:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import Tkinter as tk


def thema3():
    top = tk.Tk()
    lab = tk.Label(top, text='Rechnen im Dreieck')
    lab.pack(side=tk.TOP)

    variable = tk.IntVar()
    variable.set(0)
    texts = ['mit einem rechten Winkel',
             'mit dem Satz des Pythagoras',
             'mit dem Winkel-Summen-Satz',
             'mit Sinus, Cosinus und Tangens',
             'Flächen-Berechnung']
    for i, text in enumerate(texts):
        tmp = tk.Radiobutton(top, text=text, variable=variable, value=i)
        tmp.pack(anchor=tk.W)
    
    def dreieck_start():
        value = variable.get()
        if 0 <= value < len(texts):
            print value
        else:
            print 'x'

    def exit():
        top.destroy()
    
    for text, command in (('Start', dreieck_start), ('Exit', exit)):
        tmp = tk.Button(top, text=text, command=command)
        tmp.pack(side=tk.BOTTOM, expand=tk.NO)


if __name__ == '__main__':
    thema3()
    tk.mainloop()
Ozim
User
Beiträge: 16
Registriert: Freitag 26. Oktober 2007, 19:00

AHHHH!!!!!!!!!!! :D :D :D :D :D

Vielen Dank!!! Es klappt!!! :D :D :D

Und ich hab dadurch gleich mal mit "import Tkinter as tk" angefangen ;) )

Aso und vielen dank für den tip mit

Code: Alles auswählen

 for text, command in (('x', x), ('y', y)): 
Ich mag den Befehl jetzt schon :lol: :lol: :lol:

mfg Ozim
Antworten