Reputation: 281
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()
Upvotes: 22
Views: 101290
Reputation: 20198
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
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 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')
Also try ttk
.
Upvotes: 21
Reputation: 61
I struggled with this one as well. It took lots of research.
But I found one way, maybe the easiest way, maybe the only way, probably the most direct way:
Use styling.
In your window class:
style = ttk.Style(self)
style.configure('TButton', font = ('Helvetica', 20)
That should do it.
Upvotes: 0
Reputation: 41
use the command font = font.Font(size = 20)
to change the looking of text in button
import tkinter.font as fnt
import tkinter as tk
r=tk.Tk()
tk.Button(r,text = "Test", font = fnt.Font(size = 20))
r.mainloop()
Upvotes: 1
Reputation: 414159
tkdocs tutorial recommends using named fonts and styles if you want to tweak the appearences:
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()
Upvotes: 8