在不更改网格单元格大小的情况下增加文本大小 tkinter
Increase text size without changing grid cell size tkinter
作为我正在制作的项目的一部分,我有以下函数可以创建指定的 x 和 y 单元格的网格:
def grid():
x = 5
z = 5
for i in range(x * z):
b = Label(letters, width=0, height=0,font=("Noto Sans SemiBold", 14), text=str(i)[0])
b.grid(row=math.floor(i / x), column=i % x, sticky="nsew", padx=1, pady=1)
for i in range(x):
letters.columnconfigure(i, weight=1)
for i in range(x + (z - x)):
letters.rowconfigure(i, weight=1)
除了每个单元格上的文本太小外,这工作正常(忽略当前文本,我的最终文本将类似于 wordle,因为每个单元格将包含一个大字母)。这是当前尺寸
如果我增加文本大小,会发生这种情况:
基本上,每个字符周围的间距保持不变,这意味着文本仍然没有充分填充方框。因此,我的问题是如何在不增加单元格大小的情况下增加文本的大小,以便我的字符填满每个单元格。
我建议您使用 place()
几何管理器,因为它允许精确定位。
import math
import tkinter as tk
def grid():
x = 5
z = 5
fontsize = 64
pad = 2
cellsize = fontsize + pad
font = ("Noto Sans SemiBold", -fontsize) # Neg font size to set size in pixels.
for i in range(x * z):
b = tk.Label(letters, width=2, height=1, font=font, text=str(i)[0], relief='ridge')
row, col = divmod(i, x)
b.place(x=row*cellsize, y=col*cellsize)
root = tk.Tk()
root.geometry('400x400')
letters = tk.Frame(root)
letters.pack(fill='both', expand=True)
grid()
root.mainloop()
下面是一些显示使用不同 fontsize
值的结果的屏幕截图:
fontsize=24
:
fontsize=64
:
您可以创建一个 1x1 空白图像并将此图像添加到每个标签,然后您可以指定 width
和 height
像素,不受所用字体大小的影响:
...
blank = PhotoImage()
def grid():
x = 5
z = 5
for i in range(x * z):
b = Label(letters, width=100, height=100, image=blank, font=("Noto Sans SemiBold", 24), text=str(i)[0], compound='c')
b.grid(row=math.floor(i / x), column=i % x, sticky="nsew", padx=1, pady=1)
for i in range(x):
letters.columnconfigure(i, weight=1)
for i in range(x + (z - x)):
letters.rowconfigure(i, weight=1)
...
字体大小 24 的结果:
字体大小为 64 的结果:
作为我正在制作的项目的一部分,我有以下函数可以创建指定的 x 和 y 单元格的网格:
def grid():
x = 5
z = 5
for i in range(x * z):
b = Label(letters, width=0, height=0,font=("Noto Sans SemiBold", 14), text=str(i)[0])
b.grid(row=math.floor(i / x), column=i % x, sticky="nsew", padx=1, pady=1)
for i in range(x):
letters.columnconfigure(i, weight=1)
for i in range(x + (z - x)):
letters.rowconfigure(i, weight=1)
除了每个单元格上的文本太小外,这工作正常(忽略当前文本,我的最终文本将类似于 wordle,因为每个单元格将包含一个大字母)。这是当前尺寸
如果我增加文本大小,会发生这种情况:
基本上,每个字符周围的间距保持不变,这意味着文本仍然没有充分填充方框。因此,我的问题是如何在不增加单元格大小的情况下增加文本的大小,以便我的字符填满每个单元格。
我建议您使用 place()
几何管理器,因为它允许精确定位。
import math
import tkinter as tk
def grid():
x = 5
z = 5
fontsize = 64
pad = 2
cellsize = fontsize + pad
font = ("Noto Sans SemiBold", -fontsize) # Neg font size to set size in pixels.
for i in range(x * z):
b = tk.Label(letters, width=2, height=1, font=font, text=str(i)[0], relief='ridge')
row, col = divmod(i, x)
b.place(x=row*cellsize, y=col*cellsize)
root = tk.Tk()
root.geometry('400x400')
letters = tk.Frame(root)
letters.pack(fill='both', expand=True)
grid()
root.mainloop()
下面是一些显示使用不同 fontsize
值的结果的屏幕截图:
fontsize=24
:
fontsize=64
:
您可以创建一个 1x1 空白图像并将此图像添加到每个标签,然后您可以指定 width
和 height
像素,不受所用字体大小的影响:
...
blank = PhotoImage()
def grid():
x = 5
z = 5
for i in range(x * z):
b = Label(letters, width=100, height=100, image=blank, font=("Noto Sans SemiBold", 24), text=str(i)[0], compound='c')
b.grid(row=math.floor(i / x), column=i % x, sticky="nsew", padx=1, pady=1)
for i in range(x):
letters.columnconfigure(i, weight=1)
for i in range(x + (z - x)):
letters.rowconfigure(i, weight=1)
...
字体大小 24 的结果:
字体大小为 64 的结果: