IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème Curseur Autohiding Scrollbars


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Problème Curseur Autohiding Scrollbars
    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

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    http://effbot.org/zone/tkinter-scrol...terns.htm#text

    Ce qui manque dans ton code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    yscrollbar.config(command=text.yview)
    Bien évidemment après la création de ton widget Text.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Ce qui manque dans ton code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    yscrollbar.config(command=text.yview)
    Merci beaucoup pour cette réponse claire et précise. J'ai rajouté la ligne aux bons endroits et ça marche.

    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
    def create_frame(master, t):
        frame = Frame(master, bd=2, relief=SUNKEN)
        yscrollbar = AutoScrollbar(frame)
        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)
    
    
    def modif_frame(frame, t, myWord=""):
        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
        yscrollbar.config(command=text.yview)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème curseur de saisie sous Access
    Par anonymenet dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 10h55
  2. Problème avec ma scrollbar
    Par artif dans le forum Composants
    Réponses: 4
    Dernier message: 12/12/2005, 16h35
  3. Problème Curseur SQL SERVER
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h19
  4. memoriser position du curseur de scrollbar
    Par kerroch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 26/08/2005, 11h46
  5. [C#] Problème curseur
    Par chimay62 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/08/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo