Skip to content

jessielw/tkFontChooser

 
 

Repository files navigation

tkFontChooser

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.

Requirements

  • Linux, Windows, Mac
  • Python 3 with tkinter

Installation

pip install tkFontSelector

Documentation

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}

General arguments

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

Font Arguments

family: str

size: int

slant: str (roman or italic)

weight: str (normal or bold)

underline: bool

overstrike: bool

Example

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()