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 :

Incrémentation du padx


Sujet :

Tkinter Python

  1. #21
    Membre actif
    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
    Points : 273
    Points
    273
    Par défaut
    Si width n'a pas été initialisé avec le bouton boutonName, c'est impossible de récupérer sa valeur en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         myWidth = str(boutonName.cget("width"))
         print(myWidth)
    J'ai l'impression de pas être très loin de la solution. Mais j'ai toujours un problème avec la largeur des boutons à récupérer :

    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
     
    from tkinter import *
    from tkinter import ttk
     
    master = Tk()
    L = master.winfo_screenwidth()
    H = master.winfo_screenheight()
    bout=[]
     
    master.minsize(L,H)
     
    motsManquants=[]
     
    class MyButton(Button):
     
        def on_click(self):
     
         myWidth1 = str(b.cget("width"))  # donne 120
         myWidth2 = str(b.winfo_width())  # donne 850
         #print(myWidth)
         #print(int(b.winfo_width()))
         for k in range(1,6) :
           maLarg = 10
           largMax = int(myWidth2)#b.winfo_width()
     
           while maLarg<=largMax :
               for el in bout :
                     if maLarg<=largMax :
                         myNewWidth= el[0].winfo_width() +1
                         #myNewWidth= el[0].cget("width") +1 
                         el[0].config(width=myNewWidth)
                         maLarg=maLarg+1
     
    def callback() :
        conteneur = Frame(master, bg='yellow')
        conteneur.pack() 
        x = 0
        pack = True
        i = 0
        j = 0
        n = 0  
     
        texte = [("HG","Et","GN,","AP","FC"),("MB","je","GN,","AP","FC"),("OJ","me","GN,","AP","FC"),("KI","suis","GN,","AP","FC"),("OR","demandé","GN,","AP","FC")]
        for mot2 in texte :            
                n = n+1
                mot00 = mot2[3]
                mot01 = mot2[4]
                if mot00 == "AP" and mot01 == "FC":
                    mot = mot2[1]
                    if not x :
                        frame = Frame(conteneur, bg='grey', width=master.winfo_screenwidth(), height=30)
                        frame.pack()
                        x=1
                        i += 1
     
                    # On ne définit pas le parent
     
                    w = MyButton(text=mot, textvariable=str(n), font='arial 16', fg="black", bg="yellow")#, command=lambda j=n: OnButton2Click(j))                    
                    w['command'] = w.on_click
                    w.pack(in_=frame, side='left')
     
                    w1=(w, n, mot)
                    bout.append(w1)
     
    b = Button(master, text="OK", width=120, command=callback)
    b.pack()
     
    mainloop()
    Si j'utilise pas mainloop(), myNewWidth ne s'incrémente pas.

  2. #22
    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
    Citation Envoyé par Arsene12 Voir le message
    Si width n'a pas été initialisé avec le bouton boutonName, c'est impossible de récupérer sa valeur en faisant :
    width est un nombre de caractères à positionner lorsqu'on ne veut pas que les dimensions du widget ne soient calculées qu'en fonction du texte à afficher (et autres).

    J'ai l'impression de pas être très loin de la solution. Mais j'ai toujours un problème avec la largeur des boutons à récupérer :
    Bistouille vous a proposé un exercice tout bête.
    Sans le résoudre, récupérer la largeur des Button ne va pas vous servir à grand chose.

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

  3. #23
    Membre actif
    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
    Points : 273
    Points
    273
    Par défaut
    Je crois qu'il faut diviser par 7. Par exemple, si l'on veut que le bouton c soit égale en largeur au bouton b plus grand, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         largMax=b.winfo_width()
         c.configure(width=int(largMax/7))
    Dans ce code, vous pouvez faire varier le width du bouton b ou le supprimer et augmenter ou diminuer la taille du texte, ça fonctionne. Mais le bouton c dépasse toujours légèrement le bouton b.

    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
    from tkinter import *
    #from tkinter import ttk
     
    master = Tk()
    L = master.winfo_screenwidth()
    H = 200#master.winfo_screenheight()
    master.minsize(L,H)
    largMax=int(L/2)
    #print(largMax)
     
    def on_click():
         largMax=b.winfo_width()
         print(largMax)
         c.configure(width=int(largMax/7))
         largMax=c.winfo_width()
         print(largMax)
     
    b = Button(master, text="Largeur à atteindre", width=120, command=on_click)
    b.pack()
     
    c = Button(master, text="OK", command=on_click)
    c.pack()
     
    mainloop()

  4. #24
    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
    Citation Envoyé par Arsene12 Voir le message
    Je crois qu'il faut diviser par 7. Par exemple, si l'on veut que le bouton c soit égale en largeur au bouton b plus grand, il faut écrire :
    Et pourquoi pas 13 ou 3?

    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         largMax=b.winfo_width()
         print(largMax)
         c.configure(width=int(largMax/7))
    Vous récupérer une taille en "pixel" pour le transformer en nombre de caractères.
    Et la taille de ces caractères dépendent de la "police" de caractères utilisés (et toutes les polices de caractères n'ont pas tous leurs caractères de même taille).

    Donc vous êtes peut être arrivé à faire tomber votre truc en marche dans un cas particulier mais vous ne maîtrisez pas grand chose de l'alchimie qui vous permettrait de le généraliser.

    Et n'oubliez pas que le but d'une interface utilisateur est juste de rendre votre programme facile à utiliser par des interactions "intuitives".
    Pour l'instant, vous bataillez à mettre au point un truc sans avoir expliqué ce que çà va apporter côté interface, ni détailler pourquoi "grid" ou "pack" ne suffiraient pas.

    Vous vous rendez compte que vous bataillez contre des tas de widgets qui ont un comportement, les geometry manager ("grid" et "pack") qui font leur loi,....
    Pour simplifier, vous pourriez utiliser un Canvas (afficher du texte avec un fond autour): plus de widgets, plus de geometry manager, ... vous pouvez maîtriser ce qu'il se passe (mais il va falloir coder un peu plus).

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

  5. #25
    Membre actif
    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
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vous récupérer une taille en "pixel" pour le transformer en nombre de caractères.
    Vous vous rendez compte que vous bataillez contre des tas de widgets qui ont un comportement, les geometry manager ("grid" et "pack") qui font leur loi,....
    Pour simplifier, vous pourriez utiliser un Canvas (afficher du texte avec un fond autour): plus de widgets, plus de geometry manager, ... vous pouvez maîtriser ce qu'il se passe (mais il va falloir coder un peu plus).
    - W
    Je pense avoir compris. Lorsqu'on utilise pack() pour créer un bouton ou un label, il n'est plus possible ensuite de redéfinir sa taille en pixel par la méthode config. Pour faire ça il faut, pour chaque rangée de bouton, créer un frame avec une grid. Dans chaque case de la grid y'aurait un bouton avec l'attribut expand dont je pourrais faire varier la largeur en pixel à ma guise.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Incrémenter le padx
    Par Arsene12 dans le forum Tkinter
    Réponses: 4
    Dernier message: 26/11/2018, 11h20
  2. Incrémentation d'un champ de la table
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/09/2003, 20h33
  3. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36

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