在 Tkinter 3.x 中获取 canvas/widget 大小
Getting canvas/widget size in Tkinter 3.x
之前有人问过一个问题,,关于在 window 的大小发生变化时获取小部件的尺寸。
链接的问题和答案完美无缺,但我有一个跟进问题,遗憾的是因为我的帐户很新,我还不能 post 发表评论!
我的问题是;两者之间的有效区别是什么:
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()
据我所知,代码运行完美。随着 window 大小的更改,“”事件调用 show_dims 函数,更新显示的文本以显示 window 当前的宽度和高度(以像素为单位)。
我使用的两种获取window维度的方法是否相同?出于某种原因更好吗?
谢谢,
查看 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
所以除非事件是Configure
或Expose
,否则必须使用winfo
方法。 event.width
对客户来说可能更具可读性。
之前有人问过一个问题,
链接的问题和答案完美无缺,但我有一个跟进问题,遗憾的是因为我的帐户很新,我还不能 post 发表评论!
我的问题是;两者之间的有效区别是什么:
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()
据我所知,代码运行完美。随着 window 大小的更改,“
我使用的两种获取window维度的方法是否相同?出于某种原因更好吗?
谢谢,
查看 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
所以除非事件是Configure
或Expose
,否则必须使用winfo
方法。 event.width
对客户来说可能更具可读性。