我正在制作一个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函数的像素长度将变得不同。我需要一种使标签固定像素长的方法。
答案 0 :(得分:2)
您的问题标题提到设置标签的长度,但是您的真正目标似乎是使标签居中而不需要计算边距。
为此的最佳解决方案是不使用填充或边距使小部件居中。只需告诉tkinter,当您使用grid
或pack
(实际上是默认设置)时,您希望事情居中。您根本不需要做很多事情。
例如,以下内容将给出一个带有居中标题的窗口:
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)
)