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 :

placer une fenetre dans un écran


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 21
    Par défaut placer une fenetre dans un écran
    bonjour, j'ai une fenêtre Toplevel à laquelle je supprime les bordures grâce à la méthode .overrdirect(flag). Du coup, je ne peu plus la déplacer, et elle apparait en haut à gauche de l'écran. comment faire pour qu'elle apparaisse au milieu de l'écran (et donc, comment, faire pour récupérer la résolution de l'écran ) ou au moins à un autre endroits, quel qu'il soit.

    merci (d'autant, que cette question à certainement dut être posée au moins une fois dans ce forum, mais que je ne l'ais pas trouvée dans les 11 pages et 413 discutions qu'il comporte, et je m'en excuse si c'est le cas )

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai une fonction qui place une fenêtre au milieu de l'écran. Tu devrais y retrouver ce que tu cherches:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def centrefenetre(fen):
        fen.update_idletasks()
        geo=fen.geometry()
        x=geo.find('x',0)
        tx=geo[0:x]       # taille horizontale
        y=geo.find('+',x+1)
        ty=geo[x+1:y]     # taille verticale
        xecran=fen.winfo_screenwidth()
        yecran=fen.winfo_screenheight()
        x0=(xecran-int(tx))//2
        y0=(yecran-int(ty))//2
        fen.geometry("+" + str(x0) + "+" + str(y0))
    "fen" est le nom de la fenêtre et pas de la classe Application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fen=Tkinter.Tk()
    app=Application(fen)
    centrefenetre(fen)
    fen.mainloop()
    Le format du paramètre de .geometry est un peu particulier. C'est une chaine construite comme cela: "lxh+x+y" avec:
    => l = largeur de la fenêtre
    => "x" = séparateur
    => h = hauteur de la fenêtre
    => "+" = séparateur (en fait "+" ou "-")
    => x = distance horizontale avec le côté gauche de l'écran
    => "+" = séparateur (en fait "+" ou "-")
    => y = distance verticale avec le côté supérieur de l'écran

    Tyrtamos

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 21
    Par défaut
    pas tout compris à comment ça fonctionne, mais en tout cas, ça marche. merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Bon j'ai pas bien eu le temps de la décortiquer mais c'est vrai qu'elle est super ta fonction Tyrtamos.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Merci, c'est gentil.

    Pour la peine, j'ai amélioré la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def geoliste(g):
        r=[i for i in range(0,len(g)) if not g[i].isdigit()]
        return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])]
     
    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))
    La méthode geometry() sans paramètre renvoie une chaîne de caractère contenant de manière codée la taille et la position de la fenêtre.

    La fonction geoliste(g) extrait de la chaine en question les 4 valeurs et en renvoie la liste: taille de la fenêtre (largeur et hauteur) et position (X et Y).

    Sinon, le principe est simple: pour que la fenêtre soit au milieu de l'écran, la position de son coin supérieur gauche doit être:
    => X = largeur de l'écran/2 - largeur de la fenêtre/2
    => Y = hauteur de l'écran/2 - hauteur de la fenêtre/2

    Tyrtamos

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Concernant la fonction centrefenetre(), il y a que fen.update_idletasks() qui me pose un peu de problème car je ne sais pas à quoi cela correspond. Je vais étudier ceci.

    La fonction geolist() me pose plus de soucis. Mais idem je vais l'étudier pour la comprendre au mieux.

    En tout cas c'est plus court et plus lisible que la première méthode, c'est vrai.

    Félicitation
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. Placer une valeur dans un textbox
    Par ThunderBib dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/05/2006, 22h34
  2. Placer une valeur dans un textbox
    Par ThunderBib dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/05/2006, 20h59
  3. [Reports 6i] Ancrage d'une ligne dans un écran
    Par Veve44 dans le forum Reports
    Réponses: 2
    Dernier message: 24/04/2006, 11h54
  4. VB6]cacher une fenetre dans la barre des taches en une icone
    Par bouazza92 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 26/12/2005, 23h37
  5. Placer une image dans un dossier où qu'elle soit
    Par st0nky dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2005, 21h22

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