【问题标题】:Add label to Tkinter button将标签添加到 Tkinter 按钮
【发布时间】:2021-12-27 01:59:44
【问题描述】:

我正在尝试向 Tkinter 按钮添加标签。 Tkinter 按钮有一个很棒的“文本”属性。但是我需要按钮上的另一个类似的文本字段,即每个按钮 2 个文本字段。所以我想为按钮添加一个标签作为子项。这样做的问题是它会产生不可预测的行为。按下按钮甚至只是将鼠标悬停在标签上都会导致标签消失。

button_1 = tk.Button(canvas, text='Take',command='take',width='12')
button_1.pack()
label_1 = tk.Label(button_1, text='Stream 1',font=('calibre',8))
label_1.pack()
label_1.place(x=10, y=10)

我可以通过将标签添加到与按钮相同的父级来避免这种不需​​要的行为。

label_1 = tk.Label(canvas, text='Stream 1',font=('calibre',8))

但是这样做我失去了使用按钮几何定位标签的便利性,例如从左侧插入 10 个像素,从按钮顶部插入 10 个像素。我计划为添加数百个这样的按钮创建一种方便的方法,并且不希望尝试计算父坐标中的每个标签。此外,作为按钮的子子,它成为按钮层次结构的一部分,即随按钮移动,随按钮隐藏等。

【问题讨论】:

  • 好像已经有关于这个的问题了,比如this one,这些信息有帮助吗?
  • 对于上面的两个 cmets,是的,这个问题正在解决同一个问题。但答案让我害怕。我可以将标签添加到与按钮相同的父级,并将其相对于按钮定位。即'label_1.place(in_ = btn, x=10, y=10)'。但是如果点击了标签,它将阻止接收点击的按钮。
  • @Jace999 即使您将标签的父级设置为按钮,标签仍会阻止点击。所以可以接受的答案就是你在评论中所说的:将标签的父级设置为与按钮相同并使用.place(in_=button_1, ...)

标签: python tkinter button label


【解决方案1】:

您可以通过在文本中嵌入换行符在 Button 上显示多行文本。
像这样:

import tkinter as tk

root = tk.Tk()
root.geometry('100x100')

canvas = tk.Canvas(root)
canvas.pack()

button_1 = tk.Button(canvas, text='Take\nStream 1',command='take',width='12')
button_1.pack()

#label_1 = tk.Label(button_1, text='Stream 1',font=('calibre',8))
#label_1.pack()
#label_1.place(x=10, y=10)

root.mainloop()

结果:

您可以使用anchorjustify 选项来更改文本在Label 上的位置:

button_1 = tk.Button(canvas, text='Take\nStream 1', command='take', width='12',
                     anchor='w', justify='left')
button_1.pack()

结果 2:

【讨论】:

  • 这很有潜力。但理想情况下,我需要分别访问不同的文本字段(行),因为它们的上下文将以编程方式具有不同的含义。在这种情况下,这意味着解析文本字段。管理更多的开销。我还想以不同的方式证明文本字段的合理性,这现在很棘手
  • 您可以使用anchor=justify=padx= 选项使文本以多种不同的方式出现。无论如何,你是在增加你的问题,让它变得与众不同。
  • 我只是礼貌地评论其他人的建议,看看他们是如何花时间提出建议的。无论如何,我不确定“锚”或“对齐”是否允许我适当地放置我的文本,例如在第 1 行左对齐文本、在第 2 行居中等。我需要做的是添加一个标签,并且将其绑定到底层按钮的相同方法。我刚刚设法让它工作了。
  • Labelanchorjustify 选项不提供对文本的细粒度控制——它们适用于所有文本。因此,您应该考虑使用 Text 小部件,因为它确实如此。除此之外,还有Canvas window objects,您可以在其中放置一个包含多个子小部件的Frame,从而让您非常对它们进行精细控制。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2019-12-26
  • 2017-12-04
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多