Teilbereich des Fensters ändern

Fragen zu Tkinter.
Antworten
dh233
User
Beiträge: 37
Registriert: Samstag 8. Juli 2006, 08:26

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.
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

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()
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
dh233
User
Beiträge: 37
Registriert: Samstag 8. Juli 2006, 08:26

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
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

ja effbot.org hilft immer weiter wenns um Tkinter geht^^
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
Antworten