How to fit Tkinter listbox to contents
Resetting the listbox width worked for me. I used the Oblivion's answer and noticed that the width is always zero.
listbox = tk.Listbox(master, selectmode=tk.SINGLE)listbox.config(width=0)
I also recommend to reset the root window geometry after reloading a content of the list. Otherwise if user manually extends a window the window would stop accommodate size of its content.
root.winfo_toplevel().wm_geometry("")
tkListAutoWidth.py
shows one way to do it.
Edit:
So you might have something along the lines of,
import tkinter as tkfrom tkinter import fontclass NewListbox(tk.Listbox): def autowidth(self, maxwidth=100) autowidth(self, maxwidth)def autowidth(list, maxwidth=100): f = font.Font(font=list.cget("font")) pixels = 0 for item in list.get(0, "end"): pixels = max(pixels, f.measure(item)) # bump listbox size until all entries fit pixels = pixels + 10 width = int(list.cget("width")) for w in range(0, maxwidth+1, 5): if list.winfo_reqwidth() >= pixels: break list.config(width=width+w)if __name__ == "__main__": master = tk.Tk() listbox = NewListbox(master, selectmode=tk.SINGLE) # ... # ... keys = serverDict.keys() for key in sorted(keys): listbox.insert("end", key) listbox.pack() button = tk.Button(master, text="Execute", command=execute) button.pack() listbox.autowidth() master.mainloop()