2016-11-24 2 views
0

Ich muss wissen, wenn die Größe des Canvas geändert wird (z. B. wenn der Master-Frame maximiert wird), die neue Canvas-Fenstergröße. Leider, wenn ich self.canvas ['width'] versuche, scheint es mir immer, dass ich die Breite zurückbekomme, die es hatte, wenn ich es initialisierte und nicht die aktuelle Breite. Wie erhalte ich die aktuellen Abmessungen des Canvas-Fensters?tkinter Canvas-Fenstergröße

Antwort

4

Wenn Sie abrufen self.canvas['width'], fragen Sie tkinter Sie geben die konfigurierte Breite des Widgets, nicht die tatsächlichen Breite. Für die tatsächliche Breite können Sie .winfo_width() verwenden.

Wenn Sie wissen möchten, wann die Größe des Canvas geändert wird, können Sie dem Ereignis <Configure> im Widget eine Bindung hinzufügen. Das Ereignisobjekt, das an die Bindung übergeben wird, hat das Attribut width, das auch die tatsächliche Breite des Widgets aufweist.

Hier ist ein Beispiel:

import tkinter as tk 

root = tk.Tk() 
canvas = tk.Canvas(root, width=200, height=200, background="bisque") 
canvas.pack(side="bottom", fill="both", expand=True) 

canvas.create_text(10, 30, anchor="sw", tags=["event"]) 
canvas.create_text(10, 30, anchor="nw", tags=["cget"]) 

def show_width(event): 
    canvas.itemconfigure("event", text="event.width: %s" % event.width) 
    canvas.itemconfigure("cget", text="winfo_width: %s" % event.widget.winfo_width()) 

canvas.bind("<Configure>", show_width) 

root.mainloop()