如何使用Python中的tkinter更改按钮和框架的字体和大小?

21

这是我用来在tkinter中生成一个简单文本框和按钮的代码。

为了使框架和按钮看起来更好,应该使用哪些参数?

 root = Tk.Tk()

 def submit():
    query = entry.get()
    retrieve(query)
    entry = Tk.Entry(root)
    entry.pack()
    button = Tk.Button(root, text='submit', command=submit)
    button.pack()
    root.mainloop()             
3个回答

20

更新:新墨西哥科技大学的tkinter网站已经存档在GitHub上。

Tkinter的最佳参考资料是这个新墨西哥科技大学的网站。在目录中,您将找到字体部分,在按钮小部件部分中,您将找到选项font

您必须拥有一个Tkinter对象才能创建字体。

Python-2

自2020年1月1日起,官方停止支持Python-2

from Tkinter import *  # Note: UPPER case "T" in Tkinter
import tkFont
root = Tk()

Python-3

Python-3的Tk包装器与Python-2不同

from tkinter import *  # Note: lower case "t" in tkinter
from tkinter import font as tkFont  # for convenience
root = Tk()

创建一个像新墨西哥科技大学网站示例那样的字体。
helv36 = tkFont.Font(family='Helvetica', size=36, weight='bold')
# you don't have to use Helvetica or bold, this is just an example

(注意: 为了方便,Python-3中的font被导入为tkFont)

现在您可以为原始帖子中创建的Button设置字体。

button['font'] = helv36

按钮的大小将取决于您的几何管理器,例如: gridpack。 新墨西哥科技学院网站上的layouts section仅涵盖了grid方法,但effbot.org也是一个很好的参考,他对pack讲解得非常详细。

try:  # Python-2
    from Tkinter import *
    import tkFont
except ImportError:  # Python-3
    from tkinter import *
    from tkinter import font as tkFont
# using grid
# +------+-------------+
# | btn1 |    btn2     |
# +------+------+------+
# | btn3 | btn3 | btn4 |
# +-------------+------+
root = Tk()
# tkFont.BOLD == 'bold'
helv36 = tkFont.Font(family='Helvetica', size=36, weight=tkFont.BOLD)
btn1 = Button(text='btn1', font=helv36)
btn2 = Button(text='btn2', font=helv36)
btn3 = Button(text='btn3', font=helv36)
btn4 = Button(text='btn4', font=helv36)
btn5 = Button(text='btn5', font=helv36)
root.rowconfigure((0,1), weight=1)  # make buttons stretch when
root.columnconfigure((0,2), weight=1)  # when window is resized
btn1.grid(row=0, column=0, columnspan=1, sticky='EWNS')
btn2.grid(row=0, column=1, columnspan=2, sticky='EWNS')
btn3.grid(row=1, column=0, columnspan=1, sticky='EWNS')
btn4.grid(row=1, column=1, columnspan=1, sticky='EWNS')
btn5.grid(row=1, column=2, columnspan=1, sticky='EWNS')

Tkinter Button fonts

也可以尝试 ttk


1
第一行出现了“ModuleNotFoundError: No module named 'tkFont'”错误。 - greendino
抱歉 @AbdullahSaid,我近6年前写的回复是针对Python-2.7的,所以我已经将其更新为Python-3。在使用Python-3时,您必须导入 tkinter.font 而不是 tkfont - Mark Mikofski
感谢@MarkMikofski的回复,抱歉我没有意识到这是6年前的帖子哈哈。昨天我真的很困惑,但是我已经弄清楚了。然而,在Windows和OSX之间,特别是关于网格内按钮的样式方面,有些不同。我已经在两台操作机器(Windows和OSX)上尝试过了,结果彼此之间差异很大。在OSX中配置起来要困难得多。 - greendino

8

tkdocs教程建议使用命名字体和样式,如果您想调整外观:

import random
try:
    import tkinter as Tk
    import tkinter.ttk as ttk
    import tkinter.font as font
except ImportError: # Python 2
    import Tkinter as Tk
    import ttk
    import tkFont as font

def change_font_family(query, named_font):
    named_font.configure(family=random.choice(font.families()))

root = parent = Tk.Tk()
root.title("Change font demo")

# standard named font (everything that uses it will change)
font.nametofont('TkDefaultFont').configure(size=5) # tiny

# you can use your own font
MyFont = font.Font(weight='bold')

query = Tk.StringVar()
ttk.Entry(parent, textvariable=query, font=MyFont).grid() # set font directly
ttk.Button(parent, text='Change Font Family',  style='TButton', # or use style
           command=lambda: change_font_family(query, MyFont)).grid()
query.set("The quick brown fox...")

# change font that widgets with 'TButton' style use
root.after(3000, lambda: ttk.Style().configure('TButton', font=MyFont))
# change font size for everything that uses MyFont
root.after(5000, lambda: MyFont.configure(size=48)) # in 5 seconds
root.mainloop()

这个可以运行,但是我怎么改变框架大小或重新定位框架中的按钮呢?有没有适用于Python和Tkinter的拖放界面可以正常工作? - Abkb
@AbhijathBenhur: 这是一个布局管理器的任务。请参考@Mark Mikofski的回答示例。我从未使用过tkinter界面的GUI生成器。您可以将其作为单独的问题提出来问 - jfs
使用 Qt 和 Python 绑定库 PyQt4。它包括一个名为 Qt Designer 的 GUI 构建器。还有帮助和本地化构建器(Qt Assistance 和 Qt Linguist)。请注意,Qt Creator 是用于 C/C++ 和 Java 的 IDE。Qt 是一种主流的现代 UI 框架,通过使用称为 QML 的标记语言抽象了 GUI、帮助和本地化,Qt Designer 会自动生成 QML。 - Mark Mikofski
如果坚持使用Tkinter,那么使用ttk并使用style绝对是最好的选择。ttk看起来比Tkinter小部件要漂亮得多,因为它被设计成与操作系统样式相匹配。例如:在Windows 7上,进度条看起来像Windows 7进度条,在Windows XP上则像XP进度条,在带有Gnome桌面的Linux上则像Gnome进度条等等。在我看来,不要使用tix;它已经5年没有更新了。 - Mark Mikofski

1
使用命令font = font.Font(size = 20)来改变按钮中文本的外观。
import tkinter.font as fnt
import tkinter as tk
r=tk.Tk()
tk.Button(r,text = "Test", font = fnt.Font(size = 20))
r.mainloop()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接