tkinter画布窗口大小

时间:2016-11-24 07:48:29

标签: python-3.x tkinter tkinter-canvas

我需要知道Canvas的大小调整时间(例如,当主框架最大化时)新的Canvas窗口大小。 不幸的是,如果我尝试self.canvas ['width'],我似乎总是回到它初始化时的宽度,而不是当前的宽度。 如何获取当前的Canvas窗口尺寸?

2 个答案:

答案 0 :(得分:6)

当您检索self.canvas['width']时,您要求tkinter为您提供小部件的已配置宽度,而不是实际宽度。对于实际宽度,您可以使用.winfo_width()

如果您想知道调整画布的大小,可以在窗口小部件上为<Configure>事件添加绑定。传递给绑定的事件对象具有width属性,该属性也具有窗口小部件的实际宽度。

以下是一个例子:

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()

答案 1 :(得分:0)

一种可能的解决方案:

try:
    import Tkinter as tk
except:
    import tkinter as tk

class myCanvas(tk.Frame):
    def __init__(self, root):
        #self.root = root
        self.w = 600
        self.h = 400
        self.canvas = tk.Canvas(root, width=self.w, height=self.h)
        self.canvas.pack( fill=tk.BOTH, expand=tk.YES)

        root.bind('<Configure>', self.resize)

    def resize(self, event):
        self.w = event.width
        self.h = event.height
        print ('width  = {}, height = {}'.format(self.w, self.h))

root = tk.Tk()   
root.title('myCanvas')
myCanvas(root)
root.mainloop()        

请注意,事件通知的大小在任一方向上均宽2个像素。我想这就是边界。