Bonjour,

j'ai crée une Autohiding Scrollbars à partir d'un code datant d'il y a 20 ans sur autre autre site. Je travaille en python 3.6. Voici mon code :

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from tkinter import *
from tkinter import ttk
import tkinter.font as tkFont
 
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 modif_frame(frame, t):
    yscrollbar = AutoScrollbar(frame)
    yscrollbar.grid(row=0, column=1, sticky=N+S)  
 
    text = Text(frame, yscrollcommand=yscrollbar.set)    
    text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
 
    frame.grid_columnconfigure(0, weight=1) # expansion de la colonne
    frame.grid_rowconfigure(0, weight=1) # expansion de la colonne    
    text.insert(0.0, t)
    text.font.configure(size=48)
 
    return frame
 
 
def create_frame(master, t):
    frame = Frame(master, bd=2, relief=SUNKEN)
    yscrollbar = AutoScrollbar(frame)
    yscrollbar.grid(row=0, column=1, sticky=N+S)    
 
    t = "hghfsa dosa douce puissance mes meinbres assoupis, mon tupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descend depuis Dieu jusqu'au neupe le milieu dans is chatne immense qui descnnonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests dennonce qu'il faut quitter la vie. 0 combien it me rests deend depuis Dieu jusqu'au neime toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sanssa douce puissance mes meinbres assoupis, mon time toujours eveillee.poursuit, sansuce puissance m"
 
    text = Text(frame, yscrollcommand=yscrollbar.set, font=48)
    text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
 
    frame.grid_columnconfigure(0, weight=3) # expansion de la colonne
    frame.grid_rowconfigure(0, weight=3) # expansion de la colonne    
 
    text.insert(0.0, t)
    return frame
 
if __name__ == '__main__':
    root = Tk()
 
    myColor="lightblue"
 
    # Defines and places the notebook widget
 
    nb = ttk.Notebook(root)
    toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
    newBtn = Button(toolbar, text="Bouton", borderwidth=3)#, command=none)
    newBtn.pack(side=LEFT, fill=X)
    root.update()
 
    frame1 = create_frame(nb,1)
    nb.add(frame1, text='Text')
 
    toolbar.pack(side=TOP, fill=X)
    nb.pack(fill=BOTH, expand=1)
 
    root.update()    
 
    # Fin du menu deroulant #############################################  
 
    root.configure(background="green")
    root.mainloop()
Le problème est que je ne peux déplacer le curseur qu'avec la molette ou les touches fléchées en écailles sur le clavier. Lorsque je déplace le curseur en maintenant enfoncé le bouton gauche de la souris, le curseur se repositionne aussitôt à l'endroit d'où il est parti dès que je relâche le doigt, et le texte ne défile pas vers le bas. J'ai un autre code où le curseur fonctionne mais il n'y a pas de Autohiding Scrollbars.

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
import tkinter as tk
 
LABEL_BG = "#ccc"  # Light gray.
ROWS, COLS = 10, 6  # Size of grid.
ROWS_DISP = 3  # Number of rows to display.
COLS_DISP = 4  # Number of columns to display.
 
class MyApp(tk.Tk):
    def __init__(self, title="Sample App", *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
 
        self.title(title)
        self.configure(background="Gray")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)
 
        master_frame = tk.Frame(self, bg="Light Blue", bd=3, relief=tk.RIDGE)
        master_frame.grid(sticky=tk.NSEW)
        master_frame.columnconfigure(0, weight=1)
 
        # Create a frame for the canvas and scrollbar(s).
        frame2 = tk.Frame(master_frame)
        frame2.grid(row=3, column=0, sticky=tk.NW)
 
        # Add a canvas in that frame.
        canvas = tk.Canvas(frame2, bg="Yellow")
        canvas.grid(row=0, column=0)
 
        # Create a vertical scrollbar linked to the canvas.
        vsbar = tk.Scrollbar(frame2, orient=tk.VERTICAL, command=canvas.yview)
        vsbar.grid(row=0, column=1, sticky=tk.NS)
        canvas.configure(yscrollcommand=vsbar.set)
 
        # Create a horizontal scrollbar linked to the canvas.
        hsbar = tk.Scrollbar(frame2, orient=tk.HORIZONTAL, command=canvas.xview)
        hsbar.grid(row=1, column=0, sticky=tk.EW)
        canvas.configure(xscrollcommand=hsbar.set)
 
        # Create a frame on the canvas to contain the text.
        #text_frame = tk.Frame(canvas, bg="Red", bd=2)
        text_frame = tk.Text(canvas, width=40, height=40, bg="white")
        #frame = Frame(width=768, height=576, bg="", colormap="new")
        #text_frame.pack()
        text_frame.insert(0.1, 'my status here.\nmy status here.\nmy status here.\nmy status here.\nmy status here.\n')
        canvas.create_window((0,0), window=text_frame, anchor=tk.NW)      
 
        bbox = canvas.bbox(tk.ALL)  # Get bounding box of canvas with frames.
        canvas.configure(scrollregion=bbox, width=250, height=250)        
 
if __name__ == "__main__":
    app = MyApp("Scrollable Canvas")
    app.mainloop()
Pourriez-vous m'aider à régler ce petit problème, svp ? Je vous remercie d'avance.

Arsène