Seite 1 von 1
Tkinter Fensterinhalt mit Fenstergröße skalieren
Verfasst: Montag 16. Februar 2009, 17:27
von iceman21
Hallo ich suche nach einer Möglichkeit meine gezeichneten Kreise und linien (Spielbrett) dynamisch su verändern. Wenn ich das Fenster an der Ecke größer ziehe, soll auch der Inhalt entsprechend größer werden. Dazu müsste ich das Event des Ziehens abfangen und dann einmal nachfragen wie groß es jetzt ist. Wisst ihr wie das geht?
MfG
Re: Tkinter Fensterinhalt mit Fenstergröße skalieren
Verfasst: Montag 16. Februar 2009, 18:07
von numerix
iceman21 hat geschrieben:Hallo ich suche nach einer Möglichkeit meine gezeichneten Kreise und linien (Spielbrett) dynamisch su verändern. Wenn ich das Fenster an der Ecke größer ziehe, soll auch der Inhalt entsprechend größer werden. Dazu müsste ich das Event des Ziehens abfangen und dann einmal nachfragen wie groß es jetzt ist. Wisst ihr wie das geht?
Du ermittelst die Größe des Canvas über die Methoden winfo_width() und winfo_height(), das Event, das beim Verändern der Fenstergröße ausgelöst wird, heißt "<Configure>", und die Canvas-Methode scale() kennst du wahrscheinlich.
Verfasst: Dienstag 17. Februar 2009, 18:08
von wuf
Hallo iceman21
Hier ein kleines 'Kick Off' Beispiel:
Code: Alles auswählen
# Skriptname: scaleable_canvas_obj_01.py
import Tkinter as tk
def update_graph_obj(event):
"""Skaliere Grafik-Objekte"""
canvas_obj = event.widget
new_canvas_width = canvas_obj.winfo_width()
new_canvas_height = canvas_obj.winfo_height()
xscale_fac = float(new_canvas_width) / float(canvas_obj.width)
yscale_fac = float(new_canvas_height) / float(canvas_obj.height)
canvas_obj.width, canvas_obj.height = (new_canvas_width, new_canvas_height)
canvas_obj.scale('graph_obj', 0, 0, xscale_fac, yscale_fac)
def main():
#~~ Erstelle Hauptfenster
app_win = tk.Tk()
xpos = 20
ypos = 20
width = 200
height = 200
#~~ Erstelle die Canvas-Flaeche
canvas = tk.Canvas(app_win, bd=0, highlightthickness=0, width=width,
height=height, bg='steelblue')
canvas.pack(side='left', fill='both', expand='yes')
canvas.bind('<Configure>', update_graph_obj)
canvas.width = width
canvas.height = height
#~~ Erstelle vier Grafik-Objekte (Rechtecke)
for obj_nr in xrange(4):
offset = obj_nr * 10
canvas.create_rectangle(xpos+offset, ypos+offset, 100+offset,
100+offset, fill='yellow', tags='graph_obj')
#~~ Erstelle ein Kreis-Objekt
x = 90
y = 90
rad = 30
canvas.create_oval(x-rad, y-rad, x+rad, y+rad, stipple='gray50',
width=0, fill='red', tags='graph_obj')
app_win.mainloop()
main()
Gruss wuf
