tkinter Canvas window 大小
tkinter Canvas window size
我需要知道何时调整 Canvas 的大小(例如,当主框架最大化时)新的 Canvas window 大小。
不幸的是,如果我尝试 self.canvas['width'] 在我看来,我总是找回它在初始化时的宽度,而不是当前的宽度。
如何获取当前 Canvas window 维度?
当您检索 self.canvas['width']
时,您要求 tkinter 为您提供小部件的 配置 宽度,而不是 实际 宽度。对于实际宽度,您可以使用 .winfo_width()
.
如果您想知道 canvas 何时调整大小,您可以在小部件上添加绑定到 <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()
一个可能的解决方案:
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 像素。我想那是边界。
我需要知道何时调整 Canvas 的大小(例如,当主框架最大化时)新的 Canvas window 大小。 不幸的是,如果我尝试 self.canvas['width'] 在我看来,我总是找回它在初始化时的宽度,而不是当前的宽度。 如何获取当前 Canvas window 维度?
当您检索 self.canvas['width']
时,您要求 tkinter 为您提供小部件的 配置 宽度,而不是 实际 宽度。对于实际宽度,您可以使用 .winfo_width()
.
如果您想知道 canvas 何时调整大小,您可以在小部件上添加绑定到 <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()
一个可能的解决方案:
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 像素。我想那是边界。