【问题标题】:How get name of Toplevel window of another Toplevel?如何获取另一个 Toplevel 的 Toplevel 窗口的名称?
【发布时间】:2021-10-28 09:07:39
【问题描述】:
import tkinter as tk


r = tk.Tk()
r.title("root")
r.geometry("200x200")
f =tk.Frame(r)
f.pack()

top1 = tk.Toplevel(f)
top1.title("A")
#some widgets inside top2

top2 = tk.Toplevel(top1)
top2.title("B")  

print(top1.winfo_toplevel(), top1.winfo_children())

r.mainloop()

我只想获得top1 的顶级,而不是其他,即.!frame.!toplevel.!toplevel

winfo_toplevel() 返回.!frame.!toplevel

winfo_children() 返回.!frame.!toplevel.!toplevel,...所有孩子

【问题讨论】:

  • 所以top1.winfo_children()[0]?
  • 无论如何你都不能得到.!frame.!toplevel.!toplevel,因为top1Toplevel,它的父级是Frame而不是Toplevel。您可以使用top1.master.winfo_toplevel() 获取根窗口(@98​​7654334@)。
  • @HenryYik 但它不一定在索引 0 之前和之后可能有小部件。
  • @acw1668 top1.master.winfo_toplevel() 为什么这给root,为什么top1.winfo_toplevel().!frame.!toplevel 我很困惑
  • 如果widgetToplevelwidget.winfo_toplevel() 将返回自身,否则返回包含widgetToplevel。所以top1.winfo_toplevel() 将返回自身,即.!frame.!topleveltop1.masterf,所以top1.master.winfo_toplevel() 与返回根窗口的f.winfo_toplevel() 相同。

标签: python tkinter toplevel


【解决方案1】:

您的问题有点不清楚,但我认为您要问的是如何在仅给定top1 的情况下获得top2

没有直接的方法可以做到这一点。您可以获取 top1 的所有子级,然后返回所有 Toplevel 小部件的子级。如果您知道 top1 只有一个子元素 Toplevel,则可以返回第一个子元素 Toplevel

def get_toplevel(w):
    for child in w.winfo_children():
        if child.winfo_class() == "Toplevel":
            return child
    raise Exception("No toplevel window was found")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2018-12-18
    相关资源
    最近更新 更多