It's really strange behavior, because it's works well on my side:
try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk
import random
import string
def insert_something_to_combobox(box):
box['values'] = [gen_key() for _ in range(10)]
def gen_key(size=6, chars=string.ascii_uppercase + string.digits):
# just to generate some random stuff
return ''.join(random.choice(chars) for _ in range(size))
root = tk.Tk()
text_font = ('Courier New', '10')
main_frame = tk.Frame(root, bg='gray') # main frame
combo_box = ttk.Combobox(main_frame, font=text_font) # apply font to combobox
entry_box = ttk.Entry(main_frame, font=text_font) # apply font to entry
root.option_add('*TCombobox*Listbox.font', text_font) # apply font to combobox list
combo_box.pack()
entry_box.pack()
main_frame.pack()
insert_something_to_combobox(combo_box)
root.mainloop()


It's also possible to specify a font for a particular combobox, since we can rely on ttk::combobox::PopdownWindow function:
...
class CustomBox(ttk.Combobox):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.bind('<Map>', self._handle_popdown_font)
def _handle_popdown_font(self, *args):
popdown = self.tk.eval('ttk::combobox::PopdownWindow %s' % self)
self.tk.call('%s.f.l' % popdown, 'configure', '-font', self['font'])
...
root = tk.Tk()
text_font = ('Courier New', '10')
main_frame = tk.Frame(root, bg='gray') # main frame
combo_box = CustomBox(main_frame, font=text_font) # apply font to combobox
entry_box = ttk.Entry(main_frame, font=text_font) # apply font to entry
...
root.mainloop()
However, this CustomBox
lacks functionality, because popdown's font is configured once combobox widget is mapped, hence any later configuration of the font won't configure this option for the popdown.
Let's try to override default configuration method:
class CustomBox(ttk.Combobox):
def __init__(self, *args, **kwargs):
# initialisation of the combobox entry
super().__init__(*args, **kwargs)
# "initialisation" of the combobox popdown
self._handle_popdown_font()
def _handle_popdown_font(self):
""" Handle popdown font
Note: https://github.com/nomad-software/tcltk/blob/master/dist/library/ttk/combobox.tcl#L270
"""
# grab (create a new one or get existing) popdown
popdown = self.tk.eval('ttk::combobox::PopdownWindow %s' % self)
# configure popdown font
self.tk.call('%s.f.l' % popdown, 'configure', '-font', self['font'])
def configure(self, cnf=None, **kw):
"""Configure resources of a widget. Overridden!
The values for resources are specified as keyword
arguments. To get an overview about
the allowed keyword arguments call the method keys.
"""
# default configure behavior
self._configure('configure', cnf, kw)
# if font was configured - configure font for popdown as well
if 'font' in kw or 'font' in cnf:
self._handle_popdown_font()
# keep overridden shortcut
config = configure
This class will produce a more responsive instance of the combobox.