【问题标题】:Getting canvas/widget size in Tkinter 3.x在 Tkinter 3.x 中获取画布/小部件大小
【发布时间】:2017-12-29 14:58:19
【问题描述】:

之前有一个问题here 提出了关于在窗口大小更改时获取小部件尺寸的问题。

链接的问题和答案完美无缺,但我有一个后续问题,遗憾的是因为我的帐户很新,我还不能发布 cmets!

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

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()

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

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

谢谢,

【问题讨论】:

    标签: python-3.x macos events tkinter tkinter-canvas


    【解决方案1】:

    查看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 对客户来说可能更具可读性。

    【讨论】:

    • 嗨,Rassar,非常感谢您的回复。因此,如果我对您的理解正确:如果绑定的事件是 Configure 或 Expose ONLY,则可以使用其中任何一个(但 event.width 更具可读性)如果事件是其他任何事件,则必须使用 winfo .我必须说,拥有一种只能在某些情况下使用的方法似乎有点多余,它与替代的、普遍可用的方法没有任何不同。我将进一步阅读文档以尝试理解这一点。再次感谢,威尔
    • @WilliamPulford: " 有一个只能在某些情况下使用的方法似乎有点多余" - event.width 不是方法,它是一个属性在一个物体上。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2012-10-30
    • 2018-03-01
    • 1970-01-01
    • 2017-04-08
    • 2019-04-26
    相关资源
    最近更新 更多