在Tkinter 3.x中获取画布/小部件大小

问题描述 投票:1回答:1

here之前有一个问题,关于获取窗口小部件的尺寸,每当窗口的大小发生变化时。

链接的问题和答案工作得很好,但我有一个跟进问题,遗憾的是因为我的帐户很新,我不允许发表评论!

我的问题是;两者之间的有效区别是什么:

event.width

event.widget.winfo_width()

我的完整代码如下。

from tkinter import *

root = Tk()

display = Canvas(root, width=300, height=300, background="bisque")
display.pack(fill="both", expand=True)

display.create_text(10, 15, anchor="w", tags=["events"])
display.create_text(10, 30, anchor="w", tags=["winfos"])


def show_dims(event):
    display.itemconfigure("events", text="event.width: {0}, event.height: {1}".format(event.width, event.height))
    display.itemconfigure("winfos", text="winfo_width: {0}, winfo_height: {1}".format(event.widget.winfo_width(), event.widget.winfo_height()))

display.bind("<Configure>", show_dims)

root.mainloop()

据我所知,代码完美无缺。随着窗口大小的改变,“<Configure>”事件调用show_dims函数,该函数更新显示的文本以显示窗口的当前宽度和高度(以像素为单位)。

我使用两种方法来获得窗口尺寸相同吗?出于某种原因是否更好?

谢谢,

python-3.x macos events tkinter tkinter-canvas
1个回答
1
投票

看看event文档:

width - width of the exposed window (Configure, Expose)

所以在你的特殊情况下,event.widthevent.widget.winfo_width()总是完全相同。

但是有一个不同的事件:

from tkinter import *

root = Tk()
d = Label(root, width=50, height=50, text="HI")
d.pack(expand=True)

def check(event):
    print(event.width)
    print(event.widget.winfo_width())

d.bind("<1>", check)
root.mainloop()

此代码显示:

??
456

所以必须使用winfo方法,除非事件是ConfigureExposeevent.width可能对客户更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.