[python] problém s Tk

geon geon na post.cz
Čtvrtek Červenec 14 12:04:24 CEST 2005


Vita Titl napsal(a):

>Vytvářím zaškrtávací políčka a nevím kolik jich bude, počet načítám ze seznamu, tedy zdroj vypadá nějak takto:
>a=0
>policka = ["policko1", "policko2", "policko3", "atd"]
>while 1:
>    try:       
>        ch = Checkbutton(okno, text=policka[a])
>        ch.pack()
>        a=a+1
>    except:
>        break
>
>Můj problém: nevím jak potom přistupovat k hodnotám, které nabývá Checkbutton?
>Můžete mi poradit?
>
>  
>
Asi jde i řešení ch.cget(...) - viz manuál, ale Tkinter to spíše řeší 
tak, že si pro kařdý Button zavede proměnnou, která pak nabývá stavů 
podle zaškrtnutí a funguje i zpětně, že když změníš proměnou, tak se 
změní políčko.

To use a Checkbutton, you must create a Tkinter variable:

    var = IntVar()
    c = Checkbutton(master, text="Expand", variable=var)

Takže v tom cyklu bych udělal něco jako:
butt=[]
for a in range(len(policka)):
   
    var=IntVar()
    butt.append(var)
    ch = Checkbutton(okno, text=policka[a], variable=var)
    ch.pack()


No a k hodnotám pak přistupuješ:
hodnota=butt[x].get()
butt[x].set(1)

Pokud budeš chtít ale měnit i button (text, nebo ho nechat zmizet), 
musíš si podobně schovávat i ch, třebas takto:

If you need to keep track of both the variable and the widget, you can 
simplify your code somewhat by attaching the variable to the widget 
reference object.

    v = IntVar()
    c = Checkbutton(master, text="Don't show this again", variable=v)
    c.var = v



-- 
geon
Vyjímka je pravidlo. Rekurzivní.




Další informace o konferenci Python