我在 Tkinter 中更改按钮的字体大小时遇到问题,当我尝试这样做时按钮也会根据文本的大小展开/收缩 .有没有一种方法可以在固定按钮大小的情况下更改文本大小?
我在设计井字游戏应用程序时遇到过这个问题,但是为了省去您的麻烦,下面是一个非常最小的示例在实践中遇到的问题:
import Tkinter as tk
MyWindow = tk.Tk()
MyWindow.geometry("500x550")
button = tk.Button(MyWindow,text="Hello!",width=17,height=10,font=('Helvetica', '20'))
button.grid(row=1, column=1)
MyWindow.mainloop()
此处最重要的部分是font=('Helvetica', '15')
,或者更具体地说,数字 15。如果您更改该数字并再次运行此程序,不仅文本会变大/变小,按钮也会变大/变小!我该如何解决这个问题?
这可能是一个非常的简单问题。我刚刚开始使用 Tkinter。提前感谢我收到的任何帮助!
最佳答案
通常,当您为按钮指定宽度时,该宽度以字符为单位(即:width=1
表示一个平均大小的字符的宽度)。但是,如果按钮有图像,则宽度指定以像素为单位的大小。
按钮可以同时包含图像和文本,因此一种策略是将 1x1 像素作为图像,以便您可以以像素为单位指定按钮大小。当您这样做并更改字体大小时,按钮将不会变大,因为它被赋予了绝对大小。
这是一个说明该技术的示例。运行代码,然后单击“变大”或“变小”以查看文本大小发生变化但按钮没有变化。
import Tkinter as tk
import tkFont
def bigger():
size = font.cget("size")
font.configure(size=size+2)
def smaller():
size = font.cget("size")
size = max(2, size-2)
font.configure(size=size)
root = tk.Tk()
font = tkFont.Font(family="Helvetica", size=12)
toolbar = tk.Frame(root)
container = tk.Frame(root)
toolbar.pack(side="top", fill="x")
container.pack(side="top", fill="both", expand=True)
bigger = tk.Button(toolbar, text="Bigger", command=bigger)
smaller = tk.Button(toolbar, text="Smaller", command=smaller)
bigger.pack(side="left")
smaller.pack(side="left")
pixel = tk.PhotoImage(width=1, height=1)
for row in range(3):
container.grid_rowconfigure(row, weight=1)
for column in range(3):
container.grid_columnconfigure(column, weight=1)
button = tk.Button(container, font=font, text="x",
image=pixel, compound="center", width=20, height=20)
button.grid(row=row, column=column)
root.mainloop()
综上所述,几乎从来没有什么时候这是个好主意。如果用户想要更大的字体,整个 UI 应该适应。 Tkinter 真的很擅长实现这一点,以至于它在默认情况下几乎都能正常工作。
关于python - 更改字体大小而不影响 Tkinter 按钮大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42840070/