python tkinter 控件 有没有 像 canvas里的 tag 标签功能

在一边学一边做一个 GUI项目 练手 遇到了 几个问题 应该有好的办法 但是 闭门造车 还是需要 指点一二

把一些一起用到的 button ,lable 等 放到一个 Frame 里统一显示 ,隐藏 但是 调用觉得不够灵活
现在是用 fms[0].place_slaves()[1]['text'] 这个形式利用
后来看到 Canvas 下有 tag 标签功能 很灵活 但是 只针对 画线的 控件才行

请问 button , lable 等控件 有没有 类似与 tag 一样的 调用法 ,
大家是 用什么办法 呢?

下面是 我简化的代码

tkinter:
fm=tk.Frame(root)
tl=tk.Label(fm) 
tl.place(x=0,y=0)
tb=tk.Button(fm)
tb.place(x=0,y=40)
fm.pack(fill=tk.X)
fms.append(fm)
fms[0].place_slaves()[1]['text']

tag:
cv.create_oval(350, 50, 580, 200,tag = ('g1', 'g2', 'g3', 'tag4'))
cv.find_withtag('tag4')

您可以使用 Tkinter 的 grid 或 pack 布局管理器来控制多个控件的显示和隐藏。

例如,如果您使用 pack 布局管理器,则可以使用 pack_forget() 方法将控件隐藏,使用 pack() 方法将控件显示。例如:

# 隐藏控件
tl.pack_forget()
tb.pack_forget()

# 显示控件
tl.pack()
tb.pack()
如果您使用 grid 布局管理器,则可以使用 grid_remove() 方法将控件隐藏,使用 grid() 方法将控件显示。例如:


# 隐藏控件
tl.grid_remove()
tb.grid_remove()

# 显示控件
tl.grid()
tb.grid()
对于 Frame 中的控件,您可以使用 pack_slaves() 或 grid_slaves() 方法来获取所有控件的列表。例如:


# 获取 Frame 中的所有控件
slaves = fm.pack_slaves()

# 获取第二个控件
second_slave = slaves[1]
对于一些控件,例如 Label 和 Button,您可以使用 config() 方法来更改其属性。例如,您可以使用以下代码来更改标签的文本:


tl.config(text='新文本')
对于更复杂的布局,您可以使用 Tkinter 的组合容器,例如 PanedWindow 和 Notebook,将多个控件




组合在一起。这样,您就可以通过对组合容器进行操作来控制多个控件的显示和隐藏。

例如,您可以使用 PanedWindow 将多个控件放置在水平或垂直分隔条上,然后使用 forget() 方法隐藏某个控件。例如:
import tkinter as tk

root = tk.Tk()

# 创建 PanedWindow 容器
pw = tk.PanedWindow(root, orient=tk.HORIZONTAL)

# 创建标签和按钮
tl = tk.Label(pw, text='标签')
tb = tk.Button(pw, text='按钮')

# 将控件添加到 PanedWindow 中
pw.add(tl)
pw.add(tb)

# 将 PanedWindow 放置在窗口中
pw.pack()

# 隐藏按钮
tb.pack_forget()

root.mainloop()
对于更复杂的布局,您还可以使用 Notebook 将多个控件组合成选项卡。例如:

import tkinter as tk

root = tk.Tk()

# 创建 Notebook 容器
nb = tk.Notebook(root)

# 创建标签和按钮
tl = tk.Label(nb, text='标签')
tb = tk.Button(nb, text='按钮')

# 将控件添加到 Notebook 中
nb.add(tl, text='标签选项卡')
nb.add(tb, text='按钮选项卡')

# 将 Notebook 放置在窗口中
nb.pack()

root.mainloop()

望采纳

在 tkinter 中,可以使用 widget.bind() 方法来为控件绑定事件,从而达到控制控件的目的。

例如,如果你想要通过点击按钮来隐藏或显示一个标签,可以使用以下代码:

import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text='这是一个标签')
label.pack()

def toggle_label():
    if label.winfo_viewable():
        label.pack_forget()
    else:
        label.pack()

button = tk.Button(root, text='点击切换标签的显示/隐藏', command=toggle_label)
button.pack()

root.mainloop()

tkinter的画布本来就可以对通过create_window方法创建的子控件添加或绑定到新的tag,原来的tag仍然可单独使用。

我问的问题是
请问 button , lable 等控件 有没有 类似与 tag 一样的 调用法

可能我连问题都 问不清楚, 就是说 我有好几个容器 每个容器里有 很多 不相同的 控件 , 我想调用这些控件 现在是用.place_slaves()[1] 方法来调用 感觉 不够灵活 ,所以想到了 tag 功能 ,实在不行 自己写个字典 来管理了