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 :

[Python 3.12]Positionner une fenetre au centre de l'écran


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 0
    Points
    0
    Par défaut [Python 3.12]Positionner une fenetre au centre de l'écran
    Bonjour, j'ai récupérer un script python, et je suis en train de l'adapter pour un projet.

    J'ai réussi à dimensionner les frames, mettre de la couleur, du texte, mais je ne trouve pas pour le centrage à l'écran.
    j'ai testé de différentes façons mais pas réussi.

    Pourrais-je avoir de l'aide svp?

    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
    76
    try:
        import Tkinter as tk
    except:
        import tkinter as tk
    #root = tk.Tk()
     
     
    classSampleApp(tk.Tk):
        def__init__(self):
            tk.Tk.__init__(self)
            self._frame = None
    self.switch_frame(StartPage)
    #self.geometry("%dx%d%+d%+d" % (l,h,(tk.winfo_screenwidth()-l)//2,(tk.winfo_screenheight()-h)//2))
    #x_cordinate = int((screen_width/2) - (window_width/2))
    #y_cordinate = int((screen_height/2) - (window_height/2))
    #screen_width = tk.winfo_screenwidth()
    #screen_height = tk.winfo_screenheight()
    #self.master.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
    defswitch_frame(self, frame_class):
            new_frame = frame_class(self)
            ifself._frame isnotNone:
                self._frame.destroy()
            self._frame = new_frame
            self._frame.pack()
     
        #def centrefenetre(fen):
    #fen.update_idletasks()
    #l,h,x,y=geoliste(fen.geometry())
    #fen.geometry("%dx%d%+d%+d" % (l,h,(fen.winfo_screenwidth()-l)//2,(fen.winfo_screenheight()-h)//2))
     
    classStartPage(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            self.master.title("StartPage")
            tk.Label(self, text="Choisissez l'action à executer.", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
     
            tk.Button(
                self, text="Go to page one", command=lambda: master.switch_frame(PageOne)
            ).pack(side="left",padx=15, pady=6)
            tk.Button(
                self, text="Go to page two", command=lambda: master.switch_frame(PageTwo)
            ).pack(side="right",padx=15, pady=6)
     
    classPageOne(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            tk.Frame.configure(self, bg="green")
            tk.Label(self, text="vous avez choisi la page One", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
            self.master.title("PageOne ")
            tk.Button(
                self,
                text="Go back to start page",
                command=lambda: master.switch_frame(StartPage),
            ).pack(side="top",padx=15, pady=6)
     
    classPageTwo(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            tk.Frame.configure(self, bg="red")
            tk.Label(self, text="vous avez choisi la page two", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
            self.master.title("PageTow")
            tk.Button(
                self,
                text="Go back to start page",
                command=lambda: master.switch_frame(StartPage),
            ).pack(side="top",padx=15, pady=6)
     
    if__name__ == "__main__":
        app = SampleApp()
        app.mainloop()
    -
    Edité par JeanMarcCollin1 il y a 20 minutes

  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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par CaliWeb Voir le message
    Pourrais-je avoir de l'aide svp?
    Si on cherche un peu sur Internet, on trouve ce genre de solution.

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

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    ta méthode commentée centrefenetre devrait fonctionner, à partir du moment où geoliste sort les infos dans l'ordre (or on n'a pas son code).

    en cherchant, on peut aussi tomber sur une conversation d'ici https://www.developpez.net/forums/d1...entre-fenetre/

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonsoir,

    La méthode geometry vous permet de définir la taille de la fenêtre ainsi que sa position sur l'écran.
    Pour centrer la fenêtre, vous devez calculer la position x et y en fonction des dimensions de l'écran et des dimensions de la fenêtre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par CaliWeb Voir le message
    Bonjour, j'ai récupérer un script python, et je suis en train de l'adapter pour un projet.

    J'ai réussi à dimensionner les frames, mettre de la couleur, du texte, mais je ne trouve pas pour le centrage à l'écran.
    j'ai testé de différentes façons mais pas réussi.

    Pourrais-je avoir de l'aide svp?

    j'ai réussi en ajoutant la ligne en rouge :
    self.geometry("460x120+600+300"),
    mais cela fonctionnera t-il pour tous les écrans?

    Je n'ai pas réussi à faire fonctionner autre chose.
    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
    76
    77
    try:
        import Tkinter as tk
    except:
        import tkinter as tk
    #root = tk.Tk()
    
    
    classSampleApp(tk.Tk):
        def__init__(self):
            tk.Tk.__init__(self)
            self._frame = None
    self.switch_frame(StartPage)
    self.geometry("460x120+600+300")
    #self.geometry("%dx%d%+d%+d" % (l,h,(tk.winfo_screenwidth()-l)//2,(tk.winfo_screenheight()-h)//2))
    #x_cordinate = int((screen_width/2) - (window_width/2))
    #y_cordinate = int((screen_height/2) - (window_height/2))
    #screen_width = tk.winfo_screenwidth()
    #screen_height = tk.winfo_screenheight()
    #self.master.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
    defswitch_frame(self, frame_class):
            new_frame = frame_class(self)
            ifself._frame isnotNone:
                self._frame.destroy()
            self._frame = new_frame
            self._frame.pack()
    
        #def centrefenetre(fen):
    #fen.update_idletasks()
    #l,h,x,y=geoliste(fen.geometry())
    #fen.geometry("%dx%d%+d%+d" % (l,h,(fen.winfo_screenwidth()-l)//2,(fen.winfo_screenheight()-h)//2))
    
    classStartPage(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            self.master.title("StartPage")
            tk.Label(self, text="Choisissez l'action à executer.", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
    
            tk.Button(
                self, text="Go to page one", command=lambda: master.switch_frame(PageOne)
            ).pack(side="left",padx=15, pady=6)
            tk.Button(
                self, text="Go to page two", command=lambda: master.switch_frame(PageTwo)
            ).pack(side="right",padx=15, pady=6)
    
    classPageOne(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            tk.Frame.configure(self, bg="green")
            tk.Label(self, text="vous avez choisi la page One", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
            self.master.title("PageOne ")
            tk.Button(
                self,
                text="Go back to start page",
                command=lambda: master.switch_frame(StartPage),
            ).pack(side="top",padx=15, pady=6)
    
    classPageTwo(tk.Frame):
        def__init__(self, master):
            tk.Frame.__init__(self, master)
            tk.Frame.configure(self, bg="red")
            tk.Label(self, text="vous avez choisi la page two", font=("Helvetica", 18, "bold")).pack(
                side="top", fill="x", pady=20, padx=60
            )
            self.master.title("PageTow")
            tk.Button(
                self,
                text="Go back to start page",
                command=lambda: master.switch_frame(StartPage),
            ).pack(side="top",padx=15, pady=6)
    
    if__name__ == "__main__":
        app = SampleApp()
        app.mainloop()
    -
    Edité par JeanMarcCollin1 il y a 20 minutes

  6. #6
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par CaliWeb Voir le message
    j'ai réussi en ajoutant la ligne en rouge :
    self.geometry("460x120+600+300"),
    mais cela fonctionnera t-il pour tous les écrans?
    Ben non! Ne serait ce que parce que les dimensions de ce que vous voulez afficher "au milieu" seront rarement identiques. Après si vous ne voulez pas prendre le temps de regarder comment fonctionnent les solutions qu'on a pu vous suggérer, tant pis pour vous.

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

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 0
    Points
    0
    Par défaut CaliWeb
    J’ai testé les propositions, mais cela ne fonctionne pas. Cela provoque des erreurs.

  8. #8
    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 776
    Points
    36 776
    Par défaut
    La moindre des choses serait de montrer ce que vous avez testé et décrire le problème constaté.

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

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    j'émets une prédiction sur le message d'erreur
    AttributeError: module 'tkinter' has no attribute 'winfo_screenwidth'

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 0
    Points
    0
    Par défaut CaliWeb
    @ wiztricks : Bonjour dans le code que j’ai posté, tout ce que j’ai testé est précédé de »# ».
    Mon problème c’est que l’affichage n’est pas au centre de l’écran PC, ce que j’ai expliqué

  11. #11
    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 776
    Points
    36 776
    Par défaut
    Vous êtes supposé tester un des exemples donnés dans cet article de stack overflow que vous auriez trouvé de vous même aussi avec les mots clefs "tkinter center window".

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

  12. #12
    Membre du Club
    Homme Profil pro
    Apprenti dev Python
    Inscrit en
    Août 2021
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti dev Python

    Informations forums :
    Inscription : Août 2021
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Bonjour,
    Je ne vois pas le problème dans ce cas, tu peux simplement utiliser ceci pour centrer ta fenêtre sur n'importe quel écran:
    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
    class SampleApp(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
            self._frame = None
            self.switch_frame(StartPage)
     
            # taille de ta fenêtre
            width = 460
            height = 120
     
            # récupération de la taille de l'écran
            screen_width = self.winfo_screenwidth()
            screen_height = self.winfo_screenheight()
     
            # calcul position x et y de la fenêtre
            x_coordinate = screen_width // 2 - width // 2
            y_coordinate = screen_height // 2 - height // 2
     
            # definition de la taille et de la position de la fenêtre
            self.geometry(f"{width}x{height}+{x_coordinate}+{y_coordinate}")
     
    # reste du code...
    Dymon

Discussions similaires

  1. [MDI] Positionner une fenêtre fille
    Par freud dans le forum Windows Forms
    Réponses: 11
    Dernier message: 02/11/2007, 23h44
  2. Positionner une fenêtre ouverte par un shell
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/12/2006, 08h33
  3. Positionne une fenêtre alert
    Par viny dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/10/2006, 08h59
  4. [C#]positionner une fenetre
    Par mosto dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/10/2006, 23h03
  5. Positionner une fenêtre
    Par souliersantoine dans le forum wxPython
    Réponses: 1
    Dernier message: 09/08/2006, 14h14

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