python - 更改字体大小而不影响 Tkinter 按钮大小

标签 python user-interface button tkinter font-size

我在 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/

相关文章:

javascript - jQuery donut 插件 : Arrow doesn't show on print

javascript - Facebook 关注按钮无法加载资源

javascript - 使用按钮的值而不是它的 id 通过 JavaScript 模拟按钮点击?

javascript - javascript 禁用时的 onServerClick

python - 使用 xlsxwriter 将 pandas dataframe 写入 Excel 并包含 `write_rich_string` 格式

python - 重定向后 Flask session 为空

python - Keras 奇怪的崩溃

python - 关于从n个元素中找出m个元素的所有组合的算法分析问题

user-interface - 如何设置QFileDialog来设置初始选择的文件?

ios - 如何根据键盘大小正确实现 View 的缩小和扩展?