Bonjour,
je cherche à pouvoir utiliser des Scrollbars après que l'appel d'une fonction ait rajouté des boutons dans le frame.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
# coding=UTF-8
from tkinter import ttk
from tkinter import * #pour créer des boutons, des champs d'entrée,...
from tkinter.ttk import * #to create notebook
root = Tk()
nb = Notebook(root)
 
# adding Frames as pages for the ttk.Notebook 
# first page, which would get widgets gridded into it
p1 = Frame(nb)
p2 = Frame(nb)
nb.add(p1, text='page 1')
nb.add(p2, text='page 2')
 
 
def create_button():
    for i in range(int(_num.get())): #give the number write in Spinbox
        Button(_frame,text='texte').grid(column=1,row=line+2+i) #create as many buttons as number chosen in Spinbox
 
 
#scroll bar
vsb = Scrollbar(p2, orient=VERTICAL)
vsb.grid(column=1, row=2,sticky=N+S)
hsb = Scrollbar(p2, orient=HORIZONTAL)
hsb.grid(column=0, row=3, sticky=E+W)
 
#canvas
canvas = Canvas(p2,yscrollcommand=vsb.set, xscrollcommand=hsb.set) 
canvas.grid(column=0, row=2, sticky="news")
 
vsb.config(command=canvas.yview)
hsb.config(command=canvas.xview)
# make the canvas expandable
p2.grid_rowconfigure(0, weight=1)
p2.grid_columnconfigure(0, weight=1)
 
_frame=Frame(canvas) #create a frame to add widgets
_frame.rowconfigure(1, weight=1)
_frame.columnconfigure(1, weight=1)
 
 
line=0
_num=StringVar()
_num.set('30')
Spinbox(_frame,from_=0,to=50,textvariable=_num,command=create_button).grid(column=1,row=line+1)   #the number give the number of buttons
 
#
canvas.create_window(0, 0,window=_frame)
_frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
 
#
nb.grid(column=0,row=0,sticky='nsew')
root.mainloop()
Sauf que lorsque les Buttons sont ajoutés dès qu'on clique sur les flèches du spinbox, le _frame et les scrollbars ne se sont pas redimensionnés.

Mais si j'appelle create_button() ligne 47 par exemple, les scrollbars fonctionnent correctement.

Merci pour vos réponses.