Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # I really prefer to use a Treeview for displaying data from a database
- # This code is a copy of the ScrolledText widget, and I changed it to use a Listbox
- # insted of a Text widget
- ##################################################################################
- # I really prefer to use a Treeview for displaying data in rows and columns
- from tkinter import Listbox, END, Tk, Frame, Scrollbar, Grid, Pack, Place, YES, BOTH
- class ScrolledListbox(Listbox):
- def __init__(self, master=None, **kw):
- self.frame = Frame(master)
- self.frame.columnconfigure(0, weight=1)
- self.frame.rowconfigure(0, weight=1)
- # scrollbars
- self.vbar = Scrollbar(self.frame)
- self.hbar = Scrollbar(self.frame, orient='horizontal') # horizontal scrollbar
- self.vbar.grid(row=0, column=1, sticky='ns')
- self.hbar.grid(row=1, column=0, sticky='ew')
- kw.update({'yscrollcommand': self.vbar.set})
- kw.update({'xscrollcommand': self.hbar.set})
- super().__init__(self.frame, **kw)
- self.grid(row=0, column=0, sticky='nsew')
- self.vbar['command'] = self.yview
- self.hbar['command'] = self.xview
- # Copy geometry methods of self.frame without overriding Listbox
- # methods -- hack!
- listbox_meths = vars(Listbox).keys()
- methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys()
- methods = methods.difference(listbox_meths)
- for m in methods:
- if m[0] != '_' and m != 'config' and m != 'configure':
- setattr(self, m, getattr(self.frame, m))
- def __str__(self):
- return str(self.frame)
- def main():
- root = Tk()
- root.title('ScrolledListbox example')
- slistbox = ScrolledListbox(bg='green')
- for i in range(40):
- # Here you can insert data retrieved from your database.
- # I'm using just a for loop to insert some text
- 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')
- slistbox.pack(expand=YES, fill=BOTH)
- root.mainloop()
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment