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 :

Canevas saccadé avec l'outil Scrollbar [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Canevas saccadé avec l'outil Scrollbar
    Bonsoir a tous

    J'aurai une question ... technique à vous poser.

    A l'heure actuelle je suis en train de plancher sur une interface Tkinter avec de très nombreux widgets dessus (formulaire généré automatiquement).

    En utilisant la méthode Scrollbar j'ai remarqué que lorsque cette dernière est bougée, il y a un moment de latence où tout les élements s'emmelent.

    Voici les images et le code "exemple" avec ce problème (le vrai code est trop honteux a montrer )

    Nom : 1.PNG
Affichages : 629
Taille : 6,5 Ko
    Pas de problèmes

    Nom : 2.png
Affichages : 603
Taille : 5,6 Ko
    Le scroll est en train de bouger

    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
    from tkinter import *
    #Définition du corps
    def corps ():
        #Définition du canvas de fond
        Thanatos = Canvas(fenetre, height = 50, width = 50, bg="#DDDDDD").grid()
        #Définition du canvas bougeant
        cnv = Canvas(fenetre, width = 700,  highlightbackground = "#666666")
        cnv.config(highlightthickness=1)
        cnv.grid(row=0, column=0, sticky='ns')
        #les scrolls
        hScroll = Scrollbar(Thanatos, orient=HORIZONTAL, command=cnv.xview)
        hScroll.grid(row=1, column=0, sticky='we')
        vScroll = Scrollbar(Thanatos, orient=VERTICAL, command=cnv.yview)
        vScroll.grid(row=0, column=1, sticky='ns')
     
        cnv.configure(xscrollcommand=hScroll.set, yscrollcommand=vScroll.set)
        #Définition de la Frame contenant les objets
        frm = Frame(cnv,  highlightbackground = "green")
        frm.config(highlightthickness=1)
        #Création de canvas
        for i in range(50):
            for j in range(50):
                Canvas(frm, height = 20, width = 20, highlightbackground = "red", highlightthickness=1).grid(row = i, column = j)
        frm.update()
        cnv.create_window(0, 0, window=frm, anchor=NW)
        cnv.configure(scrollregion=cnv.bbox(ALL))
     
     
    fenetre = Tk()
    corps()
     
    mainloop()
    Je m'attendais à un résultat plus fluide pour être honnête.

    Est ce que ca viendrait d'une mauvaise utilisation, mauvaise méthode oùùù mauvais PC ?

    Je vous remercie pour votre temps et bonne soirée !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,


    Citation Envoyé par Morgan L Voir le message
    Je m'attendais à un résultat plus fluide pour être honnête.

    Est ce que ca viendrait d'une mauvaise utilisation, mauvaise méthode oùùù mauvais PC ?
    Cela vient des 50x50 widgets à gérer.
    On obtiendrait le même rendu avec autant de rectangles dans un Canvas (ou seulement 100 lignes si on veut seulement un quadrillage comme rendu).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    En effet ce serait logique et plus simple. Cependant voila le problème dans mon cas réel :

    Nom : 3.png
Affichages : 557
Taille : 72,9 Ko
    lorsque c'est statique

    Nom : 4.png
Affichages : 468
Taille : 61,1 Ko
    Lorsque le scroll bouge


    J'utilise un mélange de labels (que je pourrais changer en texte canvas), d'entrées, de combobox de tkinter.ttk et de cases à cocher, donc pleins d'élements de nature différentes

    Comment faites-vous pour gérer une grosse zone de scroll pour éviter mon problème ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Morgan L Voir le message
    Comment faites-vous pour gérer une grosse zone de scroll pour éviter mon problème ?
    Vous êtes obligé de trouver des compromis pour que l'interface reste/soit utilisable par l'utilisateur tout en restant raisonnables sur les ressources utilisées.

    Dans votre cas vous avez une hiérarchie rubriques/sous-rubriques/cases à cocher, rien ne vous empêche d'avoir autant de "panneaux" que de rubriques dans un ttk.notebook.

    Vous pourriez aussi choisir d'utiliser un Treeview (puisque vos données sont hiérarchiques) éventuellement amélioré pour rendre certaines cases éditables.

    Après si vous tenez à ce que l'utilisateur puisse balayer l'ensemble des lignes, vous pouvez créer un petit nombre de widgets mis à jour en fonction des déplacements demandés (mais il va falloir coder çà à la main).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Très bien, je vous remercie pour vos conseils

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

Discussions similaires

  1. [BUG]problème avec les outils
    Par Maxoo dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 7
    Dernier message: 22/04/2006, 09h52
  2. [Synchronisation] comment et avec quels outils ?
    Par Alec6 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/02/2006, 08h23
  3. Réponses: 6
    Dernier message: 03/10/2005, 18h42
  4. Problème avec l'outil profile
    Par befb dans le forum MFC
    Réponses: 2
    Dernier message: 07/05/2005, 14h52

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