将Python标签的特定宽度设置为这么长吗?

时间:2018-08-15 22:42:25

标签: python python-3.x tkinter

我正在制作一个Python程序,我正在寻找在程序内部顶部制作一个漂亮的居中对齐标题的方法。但是,这样做很麻烦,因为使用现有的工具,我将不得不试验标签间距,以匹配标题中有多少个字符。有没有一种方法可以使Python标签的像素长度一定,而与文本的长度无关?我正在专门寻找一种使标签长度特定数目的像素的方法,因此不必尝试所有这些不同的长度。

我尝试使用“ padx”和“ pady”参数,但是我发现长度总是根据标签本身文本的长度而变化。我也尝试过“ width”参数,但它只能延伸一定长度的文本长度。

from tkinter import *

root = Tk()
root.geometry("960x600")

label_toptitle = Label(root,
                   text="Program Name",
                   padx=40,
                   pady=40,
                   font=(None, 40),
                   #height=2,
                   #width=30
                   )
root.mainloop()

这是我当前的代码,但是如果我将“程序名称”更改为另一个名称,则padx和pady和/或width或height函数的像素长度将变得不同。我需要一种使标签固定像素长的方法。

2 个答案:

答案 0 :(得分:2)

您的问题标题提到设置标签的长度,但是您的真正目标似乎是使标签居中而不需要计算边距。

为此的最佳解决方案是不使用填充或边距使小部件居中。只需告诉tkinter,当您使用gridpack(实际上是默认设置)时,您希望事情居中。您根本不需要做很多事情。

例如,以下内容将给出一个带有居中标题的窗口:

import tkinter as tk

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

label_toptitle = tk.Label(root,
                          text="Program Name",
                          font=(None, 40),
)
label_toptitle.pack(side="top", fill="x")

root.mainloop()

网格也可以使内容居中,尽管确切的语法取决于您拥有的其他行和列。不知道很难举一个有用的例子。

如果您真的需要为标签指定确切的像素宽度,则可以向标签添加一个透明的一像素图像并将其隐藏在文本后面。添加图像时,width属性表示的是像素而不是字符的宽度。

示例:

pixel = tk.PhotoImage(width=1, height=1)
label = tk.Label(root, image=pixel, text="Hello", compound="center", width=100)

答案 1 :(得分:0)

您可以创建一个变量,以声明标签的最大尺寸,然后使用它来解决所有标签声明上的宽度/高度问题,如下所示:

maxSizeX = 100
maxSizeY = 100
labelTitleText = "Program Name"
labelTitleTextSize = len(labelTitleText)
labelTitle = Label(root,
               text=labelTitleText,
               width=(maxSizeX-labelTitleTextSize),
               height=maxSizeY,
               font=(None, 40)
               )

尽管我不确定如果可以的话如何在显示器上获得字符像素宽度,您可以将以上内容更改为:

maxSizeX = 100
maxSizeY = 100
labelTitleText = "Program Name"
labelTitleTextSize = len(labelTitleText) * pixelWidth
labelTitle = Label(root,
               text=labelTitleText,
               padx=(maxSizeX-labelTitleTextSize),
               pady=maxSizeY,
               font=(None, 40)
               )