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 :

Centrer les widgets et disparition [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Centrer les widgets et disparition
    Bonjour bonjour,
    Voilà plusieurs temps que je vous lis et que vous me rendez service. Cependant, aujourd'hui mon problème n'a pas trouvé de réponse lors de mes recherches.
    Je m'explique :
    J'aimerais créer un widget tel qu'on ait un bouton (nommons le bouton 1, et quand on clique sur le bouton, cela fasse apparaitre un label, un champ d'entrée, et un autre bouton ; et que ceux-ci disparaissent ensuite lorsque l'on clique a coté.
    Jusqu'ici, j'ai à peu près réussi, mais quelque chose me turlupine : je n'arrive pas a centrer le bouton 1 au milieu de mon widget, et cela m'embête, esthétiquement parlant.
    Pouvez-vous m'éclairer ?
    Je laisse mon code ici :

    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
     
    class WidgetPersonnal(tk.Frame) :
        def __init__(self, master, name, channel, width = 300, height = 70) :
            super(WidgetPersonnal, self).__init__(width = width, height = height)
            self.Button_Name = tk.Button(self, text = name, command = self.command_detail)
            self.channel_name = tk.Label(self, text = channel)
            self.MPVar = tk.StringVar()
            self.MPEntry = tk.Entry(self, textvariable = self.MPVar)
            self.MPButton = tk.Button(self, text = "SEND")
            self.isVisible = False
     
        def grid(self, row = 0, rowspan = 1, column = 0, columnspan = 1) :
            super(WidgetPersonnal,self).grid(row = row, column = column, rowspan = rowspan, columnspan = columnspan)
            self.grid_propagate(0)
            self.Button_Name.grid(row =1, columnspan = 2, column = 0)
     
        def command_normal(self, evt) :
            mousex = evt.x_root ; mousey = evt.y_root
            debt_fenx = self.winfo_rootx() ; debt_feny = self.winfo_rooty()
            fen_width = self.winfo_width() ; fen_height = self.winfo_height()
            if not (mousex >= debt_fenx and mousex <= (debt_fenx +fen_width) and mousey >=debt_feny and mousey <=(debt_feny+fen_height)) :
                self.Button_Name.config(state = tk.NORMAL)
                self.isVisible = False
                self.unbind_all("<Button-1>")
                self.channel_name.grid_forget()
                self.MPButton.grid_forget()
                self.MPEntry.grid_forget()
                self.Button_Name.grid(row = 0, column = 1, rowspan = 2,columnspan = 3)
     
        def command_detail(self) :
            if not self.isVisible :
                self.Button_Name.config(state = tk.DISABLED)
                self.Button_Name.grid_forget()
                self.channel_name.grid(row = 0, rowspan = 1, column = 0, columnspan = 3)
                self.MPEntry.grid(row = 1, rowspan = 1, column = 0, columnspan = 2)
                self.MPButton.grid(row = 1, rowspan = 1, column = 2, columnspan = 1)
                self.isVisible = True
                self.bind_all("<Button-1>", self.command_normal)
    Un grand merci d'avance

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

    Citation Envoyé par Thomax Voir le message
    mais quelque chose me turlupine : je n'arrive pas a centrer le bouton 1 au milieu de mon widget, et cela m'embête, esthétiquement
    Quelque chose comme çà?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    root = tk.Tk()
     
    frame = tk.Frame(root, width=300, height=300)
    frame.pack()
    frame.grid_propagate(0)
     
    frame.grid_columnconfigure(0, weight=1)
    frame.grid_rowconfigure(0, weight=1)
     
    btn = tk.Button(frame, text='foo')
    btn.grid()
    tk.mainloop()
    Et vous remarquerez que mon code s'exécute et ne fait pas beaucoup de lignes.

    - W

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Non pas exactement,
    Le problème est que l'ensemble apparaissant quand on clique sur le bouton est plus grand que le bouton. Donc avec grid, il est décentré : je voudrais qu'il soit centré par rapport à la frame

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

    Moi, j'ai fait en fonction de ce que j'ai compris.
    Maintenant si vous ne réduisez pas votre code à un minimum à afficher que vous voulez "centré"... pas facile de s'y retrouver.

    - W

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    D'accord, désolé. Je reformule.

    En gros, j'ai un bouton 1 actif par défaut (bouton 1).
    Quand on clique dessus, il fait apparaître, à la place du bouton 1 (qui disparait) un label (row 0) et une entrée (row 1 column 0-1) et un bouton (row 1 column 2).
    Le premier bouton a donc disparu, et il reapparait quand on clique hors de la fenêtre.
    Le truc maintenant :
    Je voudrais que ce bouton 1, soit centré par rapport à la frame (celle ci ne doit pas voir sa taille changer quand le bouton est visible ou le reste est visible) quand il est visible.
    Sur mon code, le bouton est coin haut gauche, cela ne me va pas.

    J'espère avoir été assez clair
    Merci d'avance, et désolé

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par Thomax Voir le message
    Je voudrais que ce bouton 1, soit centré par rapport à la frame (celle ci ne doit pas voir sa taille changer quand le bouton est visible ou le reste est visible) quand il est visible.
    Sur mon code, le bouton est coin haut gauche, cela ne me va pas.
    Je vous ai indiqué dans mon exemple comment centrer le Button avec grid_XXXconfigure(..., weight=1). Si vous mettez en commentaire, ces instructions vous vous retrouvez avec le Button coin haut gauche.

    A vous de comprendre comment çà fonctionne pour l'intégrer dans votre code.

    - W

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Mmh désolé... j'avais mal lu, je suis vraiment fatigué
    Merci beaucoup...
    Au plaisir je comprendrais ça demain

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

Discussions similaires

  1. [SWT] centrer les composants dans une vue
    Par LoloBebop dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 07/06/2006, 10h34
  2. Réponses: 1
    Dernier message: 03/05/2006, 10h49
  3. [CSS] Centrer les éléments ou un site web
    Par pp51 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 27/12/2005, 15h24
  4. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48
  5. [JTable] centrer les donnees dans les cellules
    Par cmoa59 dans le forum Composants
    Réponses: 5
    Dernier message: 20/05/2005, 11h35

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