python - 我从 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
如果我在声明和打印之间放置一个睡眠语句,它只需要更长的时间。但如果我检查它不是列表的类型,这是两个对象。
有人可以解释一下吗?我只需要一种方法让标签的主人得到它的位置!
解决方案
我发现了问题。这不是代码的问题。我只是没有注意到我也müde Frame dragable。并且因为 Frames 父级是 root 我明白了。
推荐阅读
- amazon-athena - AWS WAF 日志分区投影:不在元存储中的分区
- javascript - 我可以随机回复消息吗?(不和谐.js)
- apache-zookeeper - 编译 ZooKeeper 源代码缺少数据和 proto 包
- google-kubernetes-engine - 用于服务模型预测的 Google Kubernetes Engine vs Vertex AI(AI Platform Unified)
- python - 从列表中获取每个项目以检查它是否在密码中,但没有 for 循环
- javascript - 防止在表单字段Javascript上自动输入
- javascript - 使用 Event Target 在控制台中返回特定数据
- c++ - 试图通过指针传递来修改函数中的堆栈,打印顶部元素在函数内部和外部显示不同的结果
- swift - 按钮操作后更新和排序列表
- r - R 在写入文本文件和控制台(标准输出)之间切换