PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python: Tkinter


Malte
19.04.2005, 19:30
Hallo

ich habe heute ein Script geschrieben, wo ich durch Veränderung des Textes eines Labels die Oberfläche verändern will. Leider funktioniert es nicht - der Teil, der als "Erstes Bild" gekennzeichnet ist, bleibt immer im Fenster, auch wenn sich der Wert ändert. Kann man das überhaupt oder muss ich alles irgendwie in einem neuen Fenster öffnen?

Es soll (wenn alles fertig ist) auf eine Textdatei zugegriffen werden können (anschauen, eintragen, editieren, löschen) ... na ja schaut erstmal

from Tkinter import *

hauptfenster = Tk()

#Hilfs-Label
bereich = Label(hauptfenster, text=0)
datei_l = Label(hauptfenster, text="")

#Erstes Bild
if bereich["text"] is 0:

def einlesen():
datei = e.get()
if datei == "":
L1["text"] = "Kein Pfad angegeben"
else:
datei_l["text"] = str(datei)
bereich["text"] = "4"

L1 = Label(hauptfenster, text="Dateinamen und -pfad eingeben")
L1.pack()
bereich.pack()

e = Entry(hauptfenster)
e.pack()
b = Button(hauptfenster,text="Einlesen",command=einlesen)
b.pack()

# Navigation
if bereich["text"] is not 0: # Soll immer angezeigt werden ausser beim Auswählen der Datei

def b_eins():
bereich["text"] = "1"

def b_zwei():
bereich["text"] = "2"

def b_drei():
bereich["text"] = "3"

def b_vier():
bereich["text"] = "4"

f1 = Frame(hauptfenster)
f1.pack

bereich_eins = Button(f1,text="Eintragen",command=b_eins)
bereich_eins["width"] = 3
bereich_eins["height"] = 1
bereich_eins.pack(side=LEFT)

bereich_zwei = Button(f1,text="Editieren",command=b_zwei)
bereich_zwei["width"] = 3
bereich_zwei["height"] = 1
bereich_zwei.pack(side=LEFT)

bereich_drei = Button(f1,text="Löschen",command=b_drei)
bereich_drei["width"] = 3
bereich_drei["height"] = 1
bereich_drei.pack(side=LEFT)

bereich_vier = Button(f1,text="Anzeigen",command=b_vier)
bereich_vier["width"] = 3
bereich_vier["height"] = 1
bereich_vier.pack(side=LEFT)

# Eintragen
if bereich["text"] is 1:

f2 = Frame(hauptfenster)
f2.pack()
L1b = Label(f2, text="Eintragen")
L1b.pack()

# Editieren
if bereich["text"] is 2:

f2 = Frame(hauptfenster)
f2.pack()
L1b = Label(f2, text="Editieren")
L1b.pack()

# Löschen
if bereich["text"] is 3:

f2 = Frame(hauptfenster)
f2.pack()
L1b = Label(f2, text="Löschen")
L1b.pack()

# Anzeigen
if bereich["text"] is 4:

f2 = Frame(hauptfenster)
f2.pack()
L1b = Label(f2, text="Anzeigen")
L1b.pack()

hauptfenster.mainloop()


ChaosKrieger
19.04.2005, 21:09
hi,

in TK brauchst du dafür "Update"

versuch es mal.. evtl. ist es in pyton nicht anderst..


wert ändert
update
...


By Chaos

foobarflu
20.04.2005, 01:35
der Teil, der als "Erstes Bild" gekennzeichnet ist, bleibt immer im Fenster, auch wenn sich der Wert ändert.

Ja, weil der ganze Code nur exakt einmal ausgeführt wird.

Du musst den Code, der bei Änderung von bereich["text"] aufgerufen werden soll in einem Callback (command bei den Button-Widgets) plazieren

btw... elif existiert ;)

Malte
20.04.2005, 21:11
so ich hab das eben mit den ganzen ifs geaendert ;)

nur das mit dem callback versteh ich noch nicht ... hab dann in der hilfe nachgeschaut und bin dadurch auch nich schlau geworden. bei google bin ich auf http://www.wspiegel.de/tkinter/tkinter03.htm gestoßen aber das hat mir auch nicht geholfen ... aaaah - hab dann rumprobiert aber es hat nichts gebracht

wie funktioniert das denn?