Seite 1 von 1

Teilbereich des Fensters ändern

Verfasst: Samstag 15. Juli 2006, 15:46
von dh233
Hallo!

Ich möchte folgendes Tkinter Gui:

Links: mehrere Buttons untereinander als Navigation
Rechts: Je nachdem, welcher Button gedrückt wurde, sollen unterschiedliche Felder angezeigt werden

z.B. Buttons: 1, 2, 3

Wenn ich Button 1 drücke soll rechts ein Textfeld angezeigt werden
Wenn ich Button 2 drücke soll rechts ein weitere Button angezeigt werden

Die Buttons 1, 2, 3 sollen jedoch immer gleich bleiben.

Ich hab mal damit begonnen die Buttons 1,2,3 in ein Frame einzubetten. Mein Plan wäre auch für die rechte Seite ein Frame zu erzeugen und dann die Elemente je nach gedrücktem Button dort zu erzeugen.

Was haltet ihr von dieser Vorgehensweise?? Gibt es bessere Wege dies zu bewerkstelligen??

Langfristig soll das GUI so arbeiten:

Button1: Daten in ein Textfeld eingeben und Suchlauf starten. Erst wenn diese Aufgabe fertig ist, wird der Button 2 aktiv (ist vorher ausgegraut).

Das selbe dann für Button 2,3, usw.

Verfasst: Samstag 15. Juli 2006, 16:36
von jAN
brauchst du die felder, die zu den button 1-3 gehören später noch einmal? dann kannst du grid_forget bzw. pack_forget nehmen...

hier mal ein beispiel:

Code: Alles auswählen

import Tkinter as tk
root=tk.Tk()
def but_pressed(x):
    for i in frames:
        i.grid_forget()
    frames[x-1].grid(row=1,column=2,rowspan=3)
#3 Buttons
but1=tk.Button(root,text="Button1",command=lambda: but_pressed(1))
but1.grid(row=1,column=1)

but2=tk.Button(root,text="Button2",command=lambda: but_pressed(2))
but2.grid(row=2,column=1)

but3=tk.Button(root,text="Button3",command=lambda: but_pressed(3))
but3.grid(row=3,column=1)
#3 verschiedene Felder
frames=[]
frame1=tk.Frame(root)
label1=tk.Label(frame1,text="Feld, das erscheint wenn Button 1 betätigt wurde",
                bg="red")
label1.grid()
frames.append(frame1)
frame2=tk.Frame(root)
label2=tk.Label(frame2,text="Feld, das erscheint wenn Button 2 betätigt wurde",
                bg="yellow")
label2.grid()
frames.append(frame2)
frame3=tk.Frame(root)
label3=tk.Label(frame3,text="Feld, das erscheint wenn Button 3 betätigt wurde",
                bg="green")
label3.grid()
frames.append(frame3)

#Feld 1 wird angezeigt
frame1.grid(row=1,column=2,rowspan=3)

#Programm initialisieren
root.mainloop()

Verfasst: Samstag 15. Juli 2006, 17:49
von dh233
Danke jAN!

Wie ich sehe hast du den Grid-Manager verwendet. Ist für diese Aufgabe wahrscheinlich eh besser geeignet, als Pack.

Ich probier das Ganze mal damit.

Da ich absoluter Python-Neuling bin ist das am Anfang halt relativ mühsam und ich bin für Tipps von erfahrenen Entwicklern dankbar.

btw: Die folgenden Links wurden im Post
http://www.python-forum.de/viewtopic.php?p=37880& gepostet und sind meiner Meinung nach ziemlich nützlich. Vor allem weil auch immer Patterns dabei sind.


http://effbot.org/tkinterbook/pack.htm# ... get-method
http://effbot.org/tkinterbook/place.htm ... get-method
http://effbot.org/tkinterbook/grid.htm# ... get-method


Nochmals Danke,

lG

Verfasst: Samstag 15. Juli 2006, 18:42
von jAN
ja effbot.org hilft immer weiter wenns um Tkinter geht^^