Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Tkinter 3.x中获取画布/小部件大小_Python 3.x_Macos_Events_Tkinter_Tkinter Canvas - Fatal编程技术网

Python 3.x 在Tkinter 3.x中获取画布/小部件大小

Python 3.x 在Tkinter 3.x中获取画布/小部件大小,python-3.x,macos,events,tkinter,tkinter-canvas,Python 3.x,Macos,Events,Tkinter,Tkinter Canvas,之前有一个问题,关于在窗口大小改变时获取小部件的尺寸 链接的问题和答案工作得很好,但我有一个后续问题,很遗憾,因为我的帐户是全新的,我还不允许发表评论 我的问题是,;以下两者之间的有效区别是什么: event.width 及 我的完整代码如下 from tkinter import * root = Tk() display = Canvas(root, width=300, height=300, background="bisque") display.pack(fill="both"

之前有一个问题,关于在窗口大小改变时获取小部件的尺寸

链接的问题和答案工作得很好,但我有一个后续问题,很遗憾,因为我的帐户是全新的,我还不允许发表评论

我的问题是,;以下两者之间的有效区别是什么:

event.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()
从tkinter导入*
root=Tk()
显示=画布(根,宽度=300,高度=300,背景=“bisque”)
display.pack(fill=“both”,expand=True)
显示。创建文本(10,15,anchor=“w”,tags=[“events”])
显示。创建文本(10,30,anchor=“w”,tags=[“winfos”])
def显示dims(事件):
display.itemconfigure(“events”,text=“event.width:{0},event.height:{1}”。格式(event.width,event.height))
display.itemconfigure(“winfos”,text=“winfo_宽度:{0},winfo_高度:{1}”。格式(event.widget.winfo_宽度(),event.widget.winfo_高度())
display.bind(“,show_dims)
root.mainloop()
据我所知,代码工作得非常完美。当窗口大小更改时,“”事件调用show_dims函数,该函数更新显示的文本,以像素为单位显示窗口的当前宽度和高度

我使用的两种获取窗口尺寸的方法相同吗?出于某种原因,一个更好吗


谢谢,

查看
事件
文档:

width-暴露窗口的宽度(配置、暴露)

因此,在您的特定情况下,
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()

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

嗨,拉萨尔,非常感谢你的回复。因此,如果我理解正确:如果绑定的事件仅为
Configure
Expose
,则可以使用其中一个(但
event.width
更具可读性),如果事件是其他事件,则必须使用
winfo
。我必须说,有一种只能在某些情况下使用的方法似乎有点多余,它与另一种普遍可用的方法没有什么不同。我将进一步阅读文档,试图理解这一点。再次非常感谢,Will@WilliamPulford:“有一个只能在某些情况下使用的方法似乎有点多余”-
event.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