A simple font chooser for tkinter that allows the user to select the font family among the fonts available on his/her system. The size and style (bold, italic, underline, strike-through) of the text can be set too.
This module contains a FontSelector
class which implements the font
chooser and an ask_font
function that displays the font chooser and
returns the chosen font when the user closes the font chooser. The font
is returned as a dictionary like the one returned by the function
tkFont.Font.actual
.
- Linux, Windows, Mac
- Python 3 with tkinter
pip install tkFontSelector
from tkfontselector import ask_font
ask_font(master=None, text="Abcd", title="Font Chooser", **font_args)
Open the font chooser and return a dictionary of the font properties. This
dictionary is similar to the one returned by the actual
method of a tkinter
Font
object.
# example dictionary
{'family': str,
'size': int,
'weight': 'bold'/'normal',
'slant': 'italic'/'roman',
'underline': bool,
'overstrike': bool}
master
: Tk, Toplevel, or None (Optional)
text
: str (Optional) text to show in the font selection window
title
: str (Optional) changes the title of the window
fixed_only
: (bool, None) (Optional), if set to True
will display mono spaced fonts only, if set to False
will only show regular fonts, if set to None
will show everything
families_only
: bool (Optional), if set to True
will only show Font Families part of the UI
font_dict
: dict (Optional) font dictionary like an actual Font object
**kwargs
: (Optional) pass any other args that might be accepted
family
: str
size
: int
slant
: str (roman or italic)
weight
: str (normal or bold)
underline
: bool
overstrike
: bool
EXAMPLE_FONT_FAMILY = {
"family": "Comic Sans MS",
"size": 10,
"weight": "normal",
"slant": "roman",
"underline": 0,
"overstrike": 0,
}
if __name__ == "__main__":
"""Example Usage"""
root = Tk()
style = ttk.Style(root)
if "win" == platform[:3]:
style.theme_use("vista")
elif "darwin" in platform:
style.theme_use("clam")
else:
style.theme_use("clam")
bg = style.lookup("TLabel", "background")
root.configure(bg=bg)
label = ttk.Label(root, text="Chosen font: ")
label.pack(padx=10, pady=(10, 4))
def callback():
font = ask_font(root, title="Choose a font", font_args=EXAMPLE_FONT_FAMILY)
if font:
# spaces in the family name need to be escaped
font["family"] = font["family"].replace(" ", "\ ")
font_str = "%(family)s %(size)i %(weight)s %(slant)s" % font
if font["underline"]:
font_str += " underline"
if font["overstrike"]:
font_str += " overstrike"
label.configure(
font=font_str, text="Chosen font: " + font_str.replace("\ ", " ")
)
ttk.Button(root, text="Font Selector", command=callback).pack(padx=10, pady=(4, 10))
root.mainloop()