1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
import Tkinter as Tk
class Listbox(Tk.Frame):
def __init__ (self, parent):
Tk.Frame.__init__(self, parent, bd=2, relief=Tk.RIDGE)
self.parent = parent
self.width = 0
self.height = 0
self.grid()
self.rowconfigure(0,weight=1)
self.columnconfigure(0,weight=1)
self.cnv = Tk.Canvas(self, bd=0)
self.fr1 = Frame(self.cnv)
self.vsb = Tk.Scrollbar(self)
self.cnv.grid(column=0,row=0,sticky="NSEW")
self.cnv.create_window(0, 0, window=self.fr1)
self.vsb.configure(command=self.cnv.yview)
self.cnv.configure(yscrollcommand=self.vsb.set)
self.fr1.update_idletasks()
self.bind("<Configure>", self.resize)
def resize(self, event):
self.width = event.width
self.height = event.height
self.fr1.update_idletasks()
self.scrollbar_visbility()
def insert(self, item):
item.pack()
self.fr1.update_idletasks()
self.cnv.config(scrollregion=self.cnv.bbox("all"))
self.cnv.configure(width=self.fr1.width)
self.scrollbar_visbility()
def scrollbar_visbility(self):
if self.height > self.fr1.height:
self.vsb.grid_forget()
else:
self.vsb.grid(column=1,row=0,sticky="NSEW")
class Frame(Tk.Frame):
def __init__(self, parent):
Tk.Frame.__init__(self, parent, bd=0)
self.parent = parent
self.width = 0
self.height = 0
self.bind("<Configure>", self.resize)
def resize(self, event):
self.width = event.width
self.height = event.height
root = Tk.Tk()
lbox = Listbox(root)
root.grid()
root.rowconfigure(0,weight=1)
root.columnconfigure(0,weight=1)
lbox.grid(column=0,row=0,sticky="NS")
for i in range(0,10):
button = Tk.Button(lbox.fr1, width=10, height=2, text="%s" %(chr(i+65)), command=root.quit)
lbox.insert(button)
root.mainloop() |
Partager