【问题标题】:tkinter - create label widget (containing text) with size defined by pixel dimensionstkinter - 创建大小由像素尺寸定义的标签小部件(包含文本)
【发布时间】:2016-05-26 11:20:55
【问题描述】:

我正在尝试制作一个 tkinter 标签,其中包含由像素尺寸定义的宽度和高度的文本。很明显,包含文本大小的标签小部件是根据 docs 中的文本大小定义的:

如果标签显示文本,则以文本单位给出大小。如果标签显示图像,则大小以像素(或屏幕单位)为单位。如果 size 设置为 0 或省略,则根据标签内容计算。

我已经尝试使用这些信息来实现我想要做的事情。在创建时间表应用程序时,我想创建固定宽度 700 和可变高度的标签。这是我迄今为止尝试过的一个示例:

import tkinter as tk

root = tk.Tk()
root.geometry("800x600")

height = 20

label = tk.Label(root,width=700,bg="white",text="test",borderwidth=0,font=("Calibri",height))
label.place(x=10,y=10)

root.mainloop()

几乎在高度方面达到了我想要的,但是我希望height = 1时高度为1像素,但实际上是5像素(我的视力很好!)。至于宽度,它完全不在屏幕上,是字符宽度的 700 倍。

使用单个框架作为每个“标签”,然后创建标签小部件作为这些框架的子级也不起作用,因为框架只是调整大小以适合标签。 我的问题是:有没有办法创建按像素尺寸大小的包含文本的标签?

【问题讨论】:

  • 由于标签中有文字,700 表示“700 个字符宽”
  • @BryanOakley 我知道,我在我的问题中确实说过:“它是字符宽度的 700 倍”。另外,我已经回答了我自己的问题,请随时投票!

标签: python python-3.x tkinter label


【解决方案1】:

制定时间表有助于使用grid 打包方法,该方法具有grid_columnconfiguregrid_rowconfigure 方法,可用于设置行或列的最小和最大大小,以及他们扩张的速度:

import tkinter as tk

root = tk.Tk()

tk.Label(root, text="Test").grid(column=1, row=1, sticky="nesw")

root.grid_columnconfigure(1, minsize=700)

root.mainloop()

【讨论】:

  • 这并不能真正回答我的问题。由于时间表的布局,我必须使用place,并且问题与网格的使用无关,所以我的问题仍然存在。
  • 好吧,也许我没有可以使用地点,但它当然更可取。然而,这仍然不能回答我的问题。
  • 您能解释一下为什么它更可取吗,知道您的原因可能有助于提出解决方法...
  • 我回答了我自己的问题,感谢您的建议,但我的回答对我来说效果更好。
【解决方案2】:

我在我的情况下找到了解决方案。我使用了一个框架,禁用了它的pack_propagate 并制作了一个标签作为这个框架的孩子。我希望其他人会发现它有用。 This question对我帮助很大。

import tkinter as tk

root = tk.Tk()
root.geometry("800x600")

height = 20

label_frame = tk.Frame(root,width=700,height=height,bg="white")
label_frame.pack_propagate(0) # Stops child widgets of label_frame from resizing it
tk.Label(label_frame,bg="white",fg="black",text="test",font=("Calibri",15)).pack()
label_frame.place(x=10,y=10)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多