之前提出过一个问题,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()
据我所知,该代码运行完美。当窗口大小更改时,“
我用来获取窗口尺寸的两种方法是否相同?出于某种原因是否有更好的选择?
谢谢
最佳答案
查看事件
文档:
width - 暴露窗口的宽度(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
因此,除非事件是 Configure
或 Expose
,否则必须使用 winfo
方法。 event.width
对于客户端来说可能更具可读性。
关于python-3.x - 在 Tkinter 3.x 中获取 Canvas /小部件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48024445/