首页 > 解决方案 > 我从 widget.master (Python 3) 获得了不止一位大师

问题描述

我刚刚在 Tkinter 中编写了一个类,它允许我使一些小部件可拖动。只要小部件的主人是根窗口,这真的很有效。但是,例如,如果我有一个带有标签的框架,我可以拖动框架,但标签会消失。这是因为类将标签放置在与主窗口相关的位置。例如,如果 Frame 的大小为 100x100,并且位于主窗口的 500、500 位置,我将 Label(0, 0) 向右拖动 1px,它将被放置在 501、500 而不是 1 , 0 导致类认为主窗口是根窗口。所以现在我想只用master的位置从Label位置中减去(501-500, 500-500 > 1, 0)就只有一个问题了。这个:

f = Frame(root, width=100, height=100, bg='grey')
f.place(x=500, y=500)
l = Label(f, text='Drag me!)
l.place(x=0, y=0)

master = l.master
print(master)

返回给我的不是一位大师,而是两位。即使只有一个打印声明,它也给了我这个:

>>.
>>.!frame

如果我在声明和打印之间放置一个睡眠语句,它只需要更长的时间。但如果我检查它不是列表的类型,这是两个对象。

有人可以解释一下吗?我只需要一种方法让标签的主人得到它的位置!

标签: pythonpython-3.xclasstkintertk

解决方案


我发现了问题。这不是代码的问题。我只是没有注意到我也müde Frame dragable。并且因为 Frames 父级是 root 我明白了。


推荐阅读