Anschauliches Tutorial für Geometry Manager?

Fragen zu Tkinter.
Antworten
Arp
User
Beiträge: 65
Registriert: Dienstag 15. März 2011, 13:21

Hi,

Ich versuche grade eine Gui mittels TKinter zu erstellen. Aber ich komme mit den geometry managern nicht so recht klar. Ich habe eine große canvas, die ungefähr die hälfte der Fläche einnimmt, und drum herum will ich buttons, radioboxes und eine liste verteilen, so das alles um die große canvas herum positioniert ist. Aber bei pack() kann ich ja nur 4 richtungsvorgaben setzen... wie kann ich da z.b. sagen das die canvas oben links ist, nicht nur links oder oben. Bei place() kann ich natürlich selber festlegen wo etwas ist, aber das ist auf dauer nervig. Bei grid() blick auch nicht so recht durch. Wenn ich das große canvas auf (row,column) = (0,0) setze, ist es zwar da wo es sein soll, aber der rest passt nicht wirklich, auch wenn ich columnspan und rowspan benutze. Ich brauche hierbei also etwas hilfe :)
Kennt ihr ein gutes und vorallem anschauliches tutorial für sowas? Ich finde immer nur sachen mit wenigen elementen die ganz grob zeigen wie das geht.
Thx.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Arp
Arp hat geschrieben:Aber bei pack() kann ich ja nur 4 richtungsvorgaben setzen... wie kann ich da z.b. sagen das die canvas oben links ist, nicht nur links oder oben
Es ist relativ einfach:

Code: Alles auswählen

import Tkinter as tk

app_win = tk.Tk()
app_win.geometry('300x300')

canvas = tk.Canvas(app_win, bg='steelblue', width=100, height=100)
canvas.pack(anchor='nw')

app_win.mainloop()
Arp hat geschrieben:Bei grid() blick auch nicht so recht durch. Wenn ich das große canvas auf (row,column) = (0,0) setze, ist es zwar da wo es sein soll, aber der rest passt nicht wirklich, auch wenn ich columnspan und rowspan benutze. Ich brauche hierbei also etwas hilfe :)
Hier eine kleine Grid-Studie, welche evtl noch verbessert werden kann:

Code: Alles auswählen

#~~ Studie mit dem Grid-Manager

import Tkinter as tk

BORDER = 60
FRAME_COLOR = 'gray'

app_win = tk.Tk()
app_win.geometry('300x300')

main_frame = tk.Frame(app_win)
main_frame.grid(row=0, column=0, columnspan=3, rowspan=3,
	sticky='nesw')

main_frame.grid_rowconfigure(0, weight=0)
main_frame.grid_columnconfigure(0, weight=0)

main_frame.grid_rowconfigure(1, weight=1)
main_frame.grid_columnconfigure(1, weight=1)

main_frame.grid_rowconfigure(2, weight=0)
main_frame.grid_columnconfigure(2, weight=0)

frame_01 = tk.Frame(main_frame, height=BORDER, bg=FRAME_COLOR)
frame_01.grid(row=0, column=0, columnspan=3, sticky='we')

button_01 = tk.Button(main_frame, text='B-1')
button_01.grid(row=0, column=1)

frame_02 = tk.Frame(main_frame, width=BORDER, bg=FRAME_COLOR)
frame_02.grid(row=1, column=0, sticky='ns')

button_02 = tk.Button(main_frame, text='B-2')
button_02.grid(row=1, column=0)

canvas = tk.Canvas(main_frame, bg='steelblue', highlightthickness=0)
canvas.grid(row=1, column=1, sticky='nesw')

frame_03 = tk.Frame(main_frame, width=BORDER, bg=FRAME_COLOR)
frame_03.grid(row=1, column=2, sticky='ns')

button_03 = tk.Button(main_frame, text='B-3')
button_03.grid(row=1, column=2)

frame_04 = tk.Frame(main_frame, height=BORDER, bg=FRAME_COLOR)
frame_04.grid(row=2, column=0, columnspan=3, sticky='we')

button_04 = tk.Button(main_frame, text='B-4')
button_04.grid(row=2, column=1)

app_win.grid_rowconfigure(0, weight=2)
app_win.grid_columnconfigure(0, weight=2)

app_win.mainloop()
Hier einige Links:
Pack: http://effbot.org/tkinterbook/pack.htm
Grid: http://effbot.org/tkinterbook/grid.htm
Place: http://effbot.org/tkinterbook/place.htm

Gruß wuf :wink:
Take it easy Mates!
Antworten