EmaSMach

ScrolledListbox (python, tkinter)

Feb 24th, 2020
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.16 KB | None | 0 0
  1. # I really prefer to use a Treeview for displaying data from a database
  2. # This code is a copy of the ScrolledText widget, and I changed it to use a Listbox
  3. # insted of a Text widget
  4. ##################################################################################
  5. # I really prefer to use a Treeview for displaying data in rows and columns
  6.  
  7. from tkinter import Listbox, END, Tk, Frame, Scrollbar, Grid, Pack, Place, YES, BOTH
  8.  
  9.  
  10. class ScrolledListbox(Listbox):
  11.     def __init__(self, master=None, **kw):
  12.         self.frame = Frame(master)
  13.         self.frame.columnconfigure(0, weight=1)
  14.         self.frame.rowconfigure(0, weight=1)
  15.         # scrollbars
  16.         self.vbar = Scrollbar(self.frame)
  17.         self.hbar = Scrollbar(self.frame, orient='horizontal') # horizontal scrollbar
  18.         self.vbar.grid(row=0, column=1, sticky='ns')
  19.         self.hbar.grid(row=1, column=0, sticky='ew')
  20.  
  21.         kw.update({'yscrollcommand': self.vbar.set})
  22.         kw.update({'xscrollcommand': self.hbar.set})
  23.         super().__init__(self.frame, **kw)
  24.         self.grid(row=0, column=0, sticky='nsew')
  25.         self.vbar['command'] = self.yview
  26.         self.hbar['command'] = self.xview
  27.  
  28.         # Copy geometry methods of self.frame without overriding Listbox
  29.         # methods -- hack!
  30.         listbox_meths = vars(Listbox).keys()
  31.         methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys()
  32.         methods = methods.difference(listbox_meths)
  33.  
  34.         for m in methods:
  35.             if m[0] != '_' and m != 'config' and m != 'configure':
  36.                 setattr(self, m, getattr(self.frame, m))
  37.  
  38.     def __str__(self):
  39.         return str(self.frame)
  40.  
  41.  
  42. def main():
  43.     root = Tk()
  44.     root.title('ScrolledListbox example')
  45.     slistbox = ScrolledListbox(bg='green')
  46.     for i in range(40):
  47.         # Here you can insert data retrieved from your database.
  48.         # I'm using just a for loop to insert some text
  49.         slistbox.insert(END, f'Hello number {i}. This is a copy of the ScrolledText widget code, but I changed it to make a scrolled listbox')
  50.     slistbox.pack(expand=YES, fill=BOTH)
  51.     root.mainloop()
  52.  
  53. if __name__ == "__main__":
  54.     main()
Advertisement
Add Comment
Please, Sign In to add comment