pythontkintertk-toolkit

How to change font and size of buttons and frame in tkinter using python?


This is the code that i used to generate a simple text box and a button in tkinter.

What should be the parameters to have a better look of the frame and buttons?

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

Solution

  • UPDATE: The New Mexico Tech tkinter website has been archived on GitHub. Also effbot was also archived since 2021.

    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 Tkinter
    import tkFont
    root = Tk()
    

    Python-3

    Python-3 Tk wrappers differ from Python-2

    from tkinter import *  # Note: lower case "t" in tkinter
    from tkinter import font as tkFont  # for convenience
    root = 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 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

    Also try ttk.