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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| from tkinter import *
from tkinter import ttk
L = 600
H = 500
nbreElement = 41
class VerticalScrolledFrame(Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
"""
def __init__(self, parent, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
vscrollbar = Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set)
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
vscrollbar.config(command=canvas.yview)
# reset the view
canvas.xview_moveto(0)
canvas.yview_moveto(0)
# create a frame inside the canvas which will be scrolled with it
self.interior = interior = Frame(canvas)
interior_id = canvas.create_window(0, 0, window=interior,
anchor=NW)
# track changes to the canvas and frame width and sync them,
# also updating the scrollbar
def _configure_interior(event):
# update the scrollbars to match the size of the inner frame
size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
canvas.config(scrollregion="0 0 %s %s" % size)
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the canvas's width to fit the inner frame
canvas.config(width=interior.winfo_reqwidth())
interior.bind('<Configure>', _configure_interior)
def _configure_canvas(event):
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the inner frame's width to fill the canvas
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
canvas.bind('<Configure>', _configure_canvas)
class AutoScrollbar(Scrollbar):
# a scrollbar that hides itself if it's not needed. only
# works if you use the grid geometry manager.
def set(self, lo, hi):
if float(lo) <= 0.0 and float(hi) >= 1.0:
self.grid_remove()
else:
self.grid()
Scrollbar.set(self, lo, hi)
def pack(self, **kw):
raise TclError ("cannot use pack with this widget")
def place(self, **kw):
raise TclError ("cannot use place with this widget")
def Statistique():
app = SampleApp()
def Statistique2():
#frame1 = Frame(root, bd=2, borderwidth=3, relief=SUNKEN)
yscrollbar = AutoScrollbar(frame1, orient=VERTICAL)
yscrollbar.grid(row=0, column=2, sticky=N+S)
text = Text(frame1, yscrollcommand=yscrollbar.set, font=48)
text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
yscrollbar.config(command=text.yview)
frame1.grid_columnconfigure(0, weight=3) # expansion de la colonne
frame1.grid_rowconfigure(0, weight=3) # expansion de la colonne
t = "X"
monText=frame1
color2 = "green"
fonts = {
'normal': 'arial 9',
'bold': 'arial 9 bold',
}
#monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
for i in range(nbreElement):
monText.columnconfigure(i, weight=0)
#monText.rowconfigure(i, weight=1)
color = ['grey75', 'white'][i % 2]
for j in range(3):
label1 = Label(monText, text="Nombre de lignes contenant : "+t+ " fois l'élément" + " : ", bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,
label1.grid(row=i, column=0)#, padx=1)
label2 = Label(monText, text=t, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,
label2.grid(row=i, column=1)#, padx=1)
#monText.columnconfigure(0, weight=0)
#monText.columnconfigure(1, weight=1)
def create_frame(master, t):
frame = Frame(master, bd=2, borderwidth=3, relief=SUNKEN)
yscrollbar = AutoScrollbar(frame, orient=VERTICAL)
yscrollbar.grid(row=0, column=1, sticky=N+S)
text = Text(frame, yscrollcommand=yscrollbar.set, font=48)
text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
yscrollbar.config(command=text.yview)
frame.grid_columnconfigure(0, weight=3) # expansion de la colonne
frame.grid_rowconfigure(0, weight=3) # expansion de la colonne
t = "Hacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabiliHacque adfabilitate confisus cum eadem postridie feceris, ut incHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et petate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoHacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendoognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo."
text.insert(0.0, t)
newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique)
newBtn.pack(side=LEFT, fill=X)
#root.geometry('{}x{}'.format(L, H))
root.minsize(L, H)
return frame
if __name__ == '__main__':
class SampleApp(Tk):
def __init__(self, *args, **kwargs):
#root = Tk.__init__(self, *args, **kwargs)
nb.pack_forget()
self.frame = VerticalScrolledFrame(root)
self.frame.pack()
buttons = []
for i in range(50):
buttons.append(Button(self.frame.interior, text="Button " + str(i)))
buttons[-1].pack()
root = Tk()
myColor="lightblue"
# Defines and places the notebook widget
nb = ttk.Notebook(root)
toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
frame1 = create_frame(nb,1)
nb.add(frame1, text='Text')
toolbar.pack(side=TOP, fill=X)
nb.pack(fill=BOTH, expand=1)
# Fin du menu deroulant #############################################
root.configure(background="green")
root.mainloop() |
Partager