liqia76 2022-12-23 23:16 采纳率: 100%
浏览 19
已结题

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')

  • 写回答

4条回答 默认 最新

  • 小茯苓 2022-12-23 23:34
    关注

    您可以使用 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()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月23日

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测