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

Tkinter Python Discussion :

ScrollableFrame et widget Text [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut ScrollableFrame et widget Text
    Bonjour, je suis entrain de bricoler un logiciel.
    J'ai un problème avec le comportement anormal d'un widget (ttk.Text) lorsqu'il est mappé dans le widget bricolé ScrollableFrame.
    Lorsque l'on utilise l'ascenseur vertical de la frame, les widgets Text deviennent illisible, se couvrent de glitches.
    Des idées ?

    Je suis ennuyé car j'ai vraiment besoin d'un container scrollable pour d'autre widgets comportant un ttk.Text. Je ne vois pas d'autres possibilités pour mon application.

    Ci dessous un code minimal qui reproduit le problème.

    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
     
    import tkinter as tki
     
    class wtk_VerticalScrolledFrame(tki.LabelFrame):
        def __init__(self, parent, titre, **kwargs):
     
            #couleurs optionnelles
            bgcolor = kwargs.get('background', None) 
     
            #mise en place
            tki.LabelFrame.__init__(self, parent, text=titre, **kwargs)
            self.vscrollbar = tki.Scrollbar(self, orient=tki.VERTICAL, **kwargs)
            self.vscrollbar.pack(fill=tki.Y, side= tki.RIGHT, expand = False)
            self.canvas = tki.Canvas(self, bd=0, highlightthickness=0, yscrollcommand=self.vscrollbar.set, **kwargs)
            self.canvas.pack(side=tki.LEFT, fill=tki.BOTH, expand= True)
            self.vscrollbar.config(command = self.canvas.yview)
     
            self.canvas.xview_moveto(0)
            self.canvas.yview_moveto(0)
     
            self.interior = tki.Frame(self.canvas)
            self.interior_id = self.canvas.create_window(0,0,window=self.interior, anchor=tki.NW)
     
            #bindings
            self.interior.bind('<Configure>', self._configure_interior)
            self.canvas.bind('<Configure>', self._configure_canvas)
     
     
        def _configure_interior(self, event):
            size = (self.interior.winfo_reqwidth(), self.interior.winfo_reqheight())
            self.canvas.config(scrollregion="0 0 %s %s" % size)
            if self.interior.winfo_reqwidth() != self.canvas.winfo_width():
                    self.canvas.config(width= self.interior.winfo_reqwidth())
     
        def _configure_canvas(self, event):
            if self.interior.winfo_reqwidth() != self.canvas.winfo_width():
                self.canvas.itemconfigure(self.interior_id, width=self.canvas.winfo_width())
     
        def supprime_tout(self):
            for o in self.interior.winfo_children():
                o.destroy()
        def settitle(self, titre):
            self.configure(text = titre) 
     
    class testapp_textframescrollable(tki.Frame):
        def __init__(self, parent):
            tki.Frame.__init__(self, parent)
            f = wtk_VerticalScrolledFrame(self, 'Textes')
            f.pack(expand = True, fill = tki.BOTH)
            self.pack(expand = True, fill = tki.BOTH)
     
            std = "Hello world \n ça va t'y ? \n tout va bien ? \n bonjour touloooouuuuussssseeee !!!!! \n Hihaaaaaaaaaaaaaaa"
     
            textes = []
            for i in range(10):
                textes.append(tki.Text(f.interior))
                textes[-1].configure(height = 5)
                textes[-1].insert(tki.END, std)
     
                textes[-1].pack(fill = tki.X)
     
    if __name__ == '__main__':
     
        root = tki.Tk()
        app = testapp_textframescrollable(root)
        app.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Salut,

    Citation Envoyé par ___g__b_v- Voir le message
    Des idées ?
    Si vous voulez ajouter une Scrollbar verticale à un widget Text, vous pouvez le faire bien plus simplement avec tkinter.scrolledtext. Et si vous voulez voir comment c'est fait, il y a les sources.
    Pour le reste, vous avez peut être besoin de quelque chose moins basique mais entre un peu plus compliqué et les complications dans lesquelles vous vous êtes lancé...

    - W

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous voulez ajouter une Scrollbar verticale à un widget Text
    - W
    Merci pour votre réponse, mais ce n'est pas cela mon problème (et je sais mettre une scrollbar à un widget text).

    Le problème est que j'ai besoin de pouvoir naviguer dans un ensemble de widgets qui comportent entre autres un widget Text.
    J'ai trouvé pour cela une classe de Frame Scrollable, qui fonctionne parfaitement, sauf avec le widget Text !

    Rien de très compliqué, mais le comportement du widget Text est absolument anormal.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si vous voulez ajouter une Scrollbar verticale à un widget Text, vous pouvez le faire bien plus simplement avec tkinter.scrolledtext. Et si vous voulez voir comment c'est fait, il y a les sources.
    Pour le reste, vous avez peut être besoin de quelque chose moins basique mais entre un peu plus compliqué et les complications dans lesquelles vous vous êtes lancé...

    - W
    J'ai remplacé mon container VerticalScrolledFrame par le widget ScrolledText que vous indiquez. J'ai utilisé la méthode window_create pour y positionner des widgets Text.
    Le même problème se reproduit : l'affichage des widgets Text déconne, avec plein de glitch, illisible ou noir.

    Je me demande pourquoi...
    (je vais essayer de faire autrement mon logiciel, mais en attendant le problème n'est pas résolu !! )

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Salut,
    Citation Envoyé par ___g__b_v- Voir le message
    Rien de très compliqué, mais le comportement du widget Text est absolument anormal.
    En tout cas, votre (premier) code fonctionne très bien chez moi (Windows7, python3.4).

    - W

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,


    En tout cas, votre (premier) code fonctionne très bien chez moi (Windows7, python3.4).

    - W
    Ok avec ça et étant sur mac j'ai suspecté un problème de 'bas niveau' et une mise à jour du paquet Tcl/Tk a résolu le problème... Merci pour votre contribution.

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

Discussions similaires

  1. Probleme avec widget Text
    Par will97 dans le forum Tkinter
    Réponses: 4
    Dernier message: 16/03/2007, 21h58
  2. Widget Text et mise en forme des sélections
    Par Chris33 dans le forum Tkinter
    Réponses: 1
    Dernier message: 20/09/2006, 09h10
  3. colorier une colonne dans un widget text
    Par Chris33 dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/09/2006, 11h20
  4. [tkinter] widget text et scrollbar
    Par jojolapine dans le forum Tkinter
    Réponses: 3
    Dernier message: 29/04/2006, 15h58
  5. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30

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