Hi,
ich habe ein Programm geschrieben, dass aus zwei Canvas besteht: eins links für eine Art Menu und eins rechts, in das dynamisch Daten geladen werden. Ich nutze dabei grid. Die Breite und Höhe des linken Canvas habe ich bereits über width und height angegeben. Beim Programmstart ist also alles super.
Wenn ich jetzt allerdings das Fenster vergrößere bzw. maximiere werden beide Canvas vergrößert und ich habe links im Menu jede Menge Freiraum, den ich für den dynamischen Bereich gut brauchen könnte. Gibt es da irgendeine Möglichkeit, dass ich einen Bereich festhalte?
Was ich bis jetzt hier und im Netz gefunden habe war irgendwie nie so das richtige für mein Problem. Würde mich freuen, wenn ihr eine Idee habt
Viele Grüße und schonmal danke,
sommer87
Canvas mit fester Breite
Hi sommer87
Hier die Variante mit Pack:
Gruß wuf
Hier die Variante mit Pack:
Code: Alles auswählen
import sys
import Tkinter as tk
#~~ Lade den Dateiname dieses Skriptes
script_name = sys.argv[0]
#~~ Konstanten für die Abmessungen des Hauptfensters
MAIN_WIN_XPOS = 10
MAIN_WIN_YPOS = 10
MAIN_WIN_WIDTH = 600
MAIN_WIN_HEIGHT = 320
#--- Erstelle ein Tk-Hauptfenster ----
app_win = tk.Tk()
app_win.geometry("%dx%d+%d+%d" % (MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT,
MAIN_WIN_XPOS, MAIN_WIN_YPOS))
app_win['bg'] = 'khaki'
app_win.title(script_name)
canvas_01 = tk.Canvas(app_win, highlightthickness=0, width=200,
bg='steelblue3')
canvas_01.pack(side='left', fill='y')
canvas_02 = tk.Canvas(app_win, highlightthickness=0, bg='khaki')
canvas_02.pack(side='left', fill='both')
app_win.mainloop()
Take it easy Mates!
Hi wuf,
vielen Dank für deine Antwort.
Gibt es da auch eine Möglichkeit das mit grid zu machen? Oder muss ich jetzt wegen diesem einen Wunsch alles in pack umschreiben?
Hab nur gelesen, dass man grid und pack nicht im selben Bereich verwenden soll.
Wenn es nur mit pack geht kann ich aber innerhalb des "gepackten" Canvas meine Frames etc. weiterhin mit grid anordnen oder?
Viele Grüße,
sommer87
vielen Dank für deine Antwort.
Gibt es da auch eine Möglichkeit das mit grid zu machen? Oder muss ich jetzt wegen diesem einen Wunsch alles in pack umschreiben?
Hab nur gelesen, dass man grid und pack nicht im selben Bereich verwenden soll.
Wenn es nur mit pack geht kann ich aber innerhalb des "gepackten" Canvas meine Frames etc. weiterhin mit grid anordnen oder?
Viele Grüße,
sommer87
Hier die Grid-Variante:
Gruß wuf
Code: Alles auswählen
import sys
import Tkinter as tk
#~~ Lade den Dateiname dieses Skriptes
script_name = sys.argv[0]
#~~ Konstanten für die Abmessungen des Hauptfensters
MAIN_WIN_XPOS = 10
MAIN_WIN_YPOS = 10
MAIN_WIN_WIDTH = 600
MAIN_WIN_HEIGHT = 320
#--- Erstelle ein Tk-Hauptfenster ----
app_win = tk.Tk()
app_win.geometry("%dx%d+%d+%d" % (MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT,
MAIN_WIN_XPOS, MAIN_WIN_YPOS))
app_win['bg'] = 'khaki'
app_win.title(script_name)
canvas_01 = tk.Canvas(app_win, highlightthickness=0, width=200,
bg='steelblue3')
canvas_01.grid(column=0, row=0, sticky='nsew')
canvas_02 = tk.Canvas(app_win, highlightthickness=0, bg='khaki4')
canvas_02.grid(column=1, row=0, sticky='nsew')
app_win.columnconfigure(0, weight=0)
app_win.columnconfigure(1, weight=1)
app_win.rowconfigure(0, weight=1)
app_win.mainloop()
Take it easy Mates!
Natuerlich geht das auch mit 'grid'.
Das linke Canvas ist in seiner Groesse nicht konstant. Beim Vergroessern des Fensters waechst es nur entsprechend langsamer als das rechte Canvas, je nach den beiden Werte des 'ratio' Parameters.
(Bei ratio=(1, 999) ist es so gut wie konstant )
'grid' und 'pack' kann man immer indirekt mischen, also z.B. Widgets in einem Frame mit 'pack', dieses Frame dann mit 'grid' in einem anderen Frame usw..
yipyip
(wuf war schneller)
Code: Alles auswählen
import Tkinter as tk
class Gui(object):
def __init__(self, left_width=50, right_width=200, height=400, ratio=(1,9)):
# 'ratio' gibt an, wie weit sich die beiden Canvases im Verhaeltnis zueinander
# horziontal ausbreiten (mit den beiden Werten experimentieren!).
self.root = tk.Tk()
self.left_canvas = tk.Canvas(relief=tk.SUNKEN, width=left_width, height=height,
bg='#444466', bd=2)
self.right_canvas = tk.Canvas(relief=tk.SUNKEN, width=right_width, height=height,
bg='#aaaabb', bd=2)
# Canvases duerfen sich ausweiten
stretch = tk.W + tk.E + tk.N + tk.S
self.left_canvas.grid(row=0, column=0, sticky=stretch)
self.right_canvas.grid(row=0, column=1, sticky=stretch)
left_ratio, right_ratio = ratio
# horizontal ausweiten
self.root.columnconfigure(0, weight=left_ratio)
self.root.columnconfigure(1, weight=right_ratio)
# vertikal ausweiten
self.root.rowconfigure(0, weight=1)
def run(self):
self.root.mainloop()
if __name__ == '__main__':
Gui().run()
(Bei ratio=(1, 999) ist es so gut wie konstant )
'grid' und 'pack' kann man immer indirekt mischen, also z.B. Widgets in einem Frame mit 'pack', dieses Frame dann mit 'grid' in einem anderen Frame usw..
yipyip
(wuf war schneller)