我从widget.master获得了多个master(Python 3)

问题描述 投票:0回答:2

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

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

任何人都能解释一下吗?我只需要一种方法来获得标签的主人来获得它的位置!

python python-3.x class tkinter tk
2个回答
0
投票

Tkinter小部件存在于树结构中,并且根处必须有Tk的实例。如果您不创建一个,则会在您第一次创建窗口小部件时为您创建。

在你的输出中,“。”表示可能为您创建的根窗口,“。!frame”表示框架。

虽然,鉴于你明确地将root传递给Frame()这一事实,看起来你的代码在某处明确地创建了根窗口。


0
投票

我发现了这个问题。这不是代码的问题。我只是没有注意到我也将框架拖拽了。并且导致Frames父级是root我得到了它。

© www.soinside.com 2019 - 2024. All rights reserved.