I have found this code about scrollbar is just working fine.
from tkinter import * master = Tk() scrollbar = Scrollbar(master) scrollbar.pack(side=RIGHT, fill=Y) listbox = Listbox(master, yscrollcommand=scrollbar.set) for i in range(10000): listbox.insert(END, str(i)) listbox.pack(side=LEFT, fill=BOTH) scrollbar.config(command=listbox.yview) mainloop()
I try to use it in my code like this:
import tkinter as tk class interface(tk.Frame): def __init__(self,den): self.tklist() #in my code, tklist is not called here. I called it here to minimize the code #there are stuff in here also def tklist(self): scrollbar = tk.Scrollbar(den) self.lst1 = tk.Listbox(den, selectmode="SINGLE", width="100", yscrollcommand=scrollbar.set) for i in range(1000): self.lst1.insert(END, str(i)) self.lst1.pack(side=LEFT, fill=BOTH) scrollbar.config(command=lst1.yview) den = tk.Tk() den.title("Search") inter = interface(den) den.mainloop()
But when I ran above code, I got an error on insertion line.
NameError: global name 'END' is not defined
By the way, I tried to find documentation and a link from effbot is the closest I got but still couldn’t understand what is wrong.
Advertisement
Answer
END
, LEFT
, and BOTH
all reside in the tkinter
namespace. Thus, they need to be qualified by placing tk.
before them:
for i in range(1000): self.lst1.insert(tk.END, str(i)) self.lst1.pack(side=tk.LEFT, fill=tk.BOTH) scrollbar.config(command=lst1.yview)
Or, you could import them explicitly if you want:
from tkinter import BOTH, END, LEFT