python-3.x - 在 Tkinter 3.x 中获取 Canvas /小部件大小

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

之前提出过一个问题,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()

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

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

谢谢

最佳答案

查看事件文档:

width - 暴露窗口的宽度(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

因此,除非事件是 ConfigureExpose,否则必须使用 winfo 方法。 event.width 对于客户端来说可能更具可读性。

关于python-3.x - 在 Tkinter 3.x 中获取 Canvas /小部件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48024445/

相关文章:

python - 将 TFRecords 转换回 JPEG 图像

macos - Core Data + Cloudkit 在开发中有效,但在分发后在生产中不起作用

c# - 关键字 'event' 在 C# 中是可选的吗?

c - sigwait() 在 macOS 和 Linux 中的行为是否不同?

multithreading - 从 QRunnable 发出信号或发布事件

C++ 对列表中的自定义对象进行排序

python - 在绘图散点图中按下按钮时更新轴

python - 使用python解析相对链接和绝对链接

python - 为什么这两个 python 函数返回不同的结果?

linux - 通过本地主机上的 SSH 代理在浏览器中访问应用程序。