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
Tkinter Fensterinhalt mit Fenstergröße skalieren
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.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?
Hallo iceman21
Hier ein kleines 'Kick Off' Beispiel:
Gruss wuf
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()
Take it easy Mates!