How to change font and size of buttons and frame in tkinter using python?
UPDATE: The New Mexico Tech tkinter website has been archived on GitHub.
First the best reference for Tkinter is this New Mexico Tech website. In the toc you will find a section on fonts, and in the section on Button widgets you'll find the option font
.
you must have a Tkinter object to create a font
Python-2
Support for Python-2 has officially ended as of Jan 1, 2020
from Tkinter import * # Note: UPPER case "T" in Tkinterimport tkFontroot = Tk()
Python-3
Python-3 Tk wrappers differ from Python-2
from tkinter import * # Note: lower case "t" in tkinterfrom tkinter import font as tkFont # for convenienceroot = Tk()
create a font like the example from New Mexico Tech website
helv36 = tkFont.Font(family='Helvetica', size=36, weight='bold')# you don't have to use Helvetica or bold, this is just an example
(Note: recall for Python-3 font
was imported as tkFont
for convenience)
now you can set the font for button
created from Button
in the original post
button['font'] = helv36
The size of the button will depend on your geometry manager, EG: grid
or pack
. Only the grid
method is covered in the layouts section by New Mexico Tech site, but effbot.org is also a great reference and he covers pack
pretty well.
try: # Python-2 from Tkinter import * import tkFontexcept 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 whenroot.columnconfigure((0,2), weight=1) # when window is resizedbtn1.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')
Also try ttk
.
tkdocs tutorial recommends using named fonts and styles if you want to tweak the appearences:
import randomtry: import tkinter as Tk import tkinter.ttk as ttk import tkinter.font as fontexcept ImportError: # Python 2 import Tkinter as Tk import ttk import tkFont as fontdef 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 fontMyFont = font.Font(weight='bold')query = Tk.StringVar()ttk.Entry(parent, textvariable=query, font=MyFont).grid() # set font directlyttk.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 useroot.after(3000, lambda: ttk.Style().configure('TButton', font=MyFont))# change font size for everything that uses MyFontroot.after(5000, lambda: MyFont.configure(size=48)) # in 5 secondsroot.mainloop()