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函数,该函数更新显示的文本以显示窗口的当前宽度和高度(以像素为单位)。
我使用两种方法来获得窗口尺寸相同吗?出于某种原因是否更好?
谢谢,
看看event
文档:
width - width of the exposed window (Configure, Expose)
所以在你的特殊情况下,event.width
和event.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
方法,除非事件是Configure
或Expose
。 event.width
可能对客户更具可读性。