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 :

Bug python 2.7 + tkinter et solution


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Bug python 2.7 + tkinter et solution
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from tkinter import *
     
    master = Tk()
    Label(master, text="First Name").grid(row=0)
    Label(master, text="Last Name").grid(row=1)
     
    e1 = Entry(master)
    e2 = Entry(master)
     
    e1.grid(row=0, column=1)
    e2.grid(row=1, column=1)
     
    master.mainloop( )
    En lançant ce script depuis mon bureau la réaction de python2.7 est surprenante, il me lance un autre script en premier qui consiste à afficher une fenêtre windows. Très étrange, non?

    Parce qu'une vidéo sera bien plus explicite, voilà ce qu'il se passe lorsque je lance un script utilisant le module tkinter.



    La solution a été de faire le ménage mon bureau...

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    Première chose curieuse c'est déjà la version python,

    Sans majuscule est apparu sur la version 3.
    Ayant aussi la version 2.7.8 je sais qu'il faut faire pour que ça fonctionne.

    Rajoutez ceci pour le vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    print(sys.version)

    Concernant cette fenêtre
    c'est l'appel de Tk() qui fait afficher une fenêtre vide, qu'on remplie ensuite en utilisant l'instance master.


    Sous python 2 on ne voit pas de fenêtre tant qu'on n'a pas rafraîchi avec master.update() ou .mainloop().

    Mais sous python 3 la fenêtre apparaît dès la création de master.

    L'astuce est de masquer la fenêtre (withdraw) pendant la composition de la fenêtre puis de la réafficher (deiconify) avant le loop :

    Réponse trouvée ici : https://stackoverflow.com/a/1407700/4963472

    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
    from tkinter import *
    import sys
     
    print(sys.version)
     
    master = Tk()
    master.withdraw()
    Label(master, text="First Name").grid(row=0)
    Label(master, text="Last Name").grid(row=1)
     
    e1 = Entry(master)
    e2 = Entry(master)
     
    e1.grid(row=0, column=1)
    e2.grid(row=1, column=1)
     
    master.deiconify()
    master.mainloop()

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Juste une remarque vous devriez essayer votre code avec l'IDLE fourni dans CPython.
    Ça vous permettra de débuger et de composer votre fenêtre ligne par ligne pour comprendre.

    Si vous n'avez pas le raccourci :
    Python\Lib\idlelib\idle.pyw
    En passant en mainloop il n'est plus possible de reprendre le code mais il suffit d'utiliser .update() pour voir la progression et interagir dans la fenêtre.

    On peut tout aussi bien exécuter un code puis poursuivre dans la console de l'IDLE, en désactivant le mainloop.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je connais IDLE quand même ^^ (d'ailleurs j'ai les 2 versions 2.7 et 3.6).

    Le bug venait probablement d'un autre script python présent sur mon bureau, puisque que lorsque j'ai supprimé un peu le bordel présent sur mon bureau, le soucis a disparu, étrange tout de même... Pour info j'avais éteint et démarré mon PC entre temps, en pensant que ça venait d'un processus pythonw.exe...

    Je publiais ça juste pour l'anecdote, au sujet du import Tkinter ouai je sais pas...

Discussions similaires

  1. Problème programme Python 3 sous Tkinter
    Par vbvero dans le forum Tkinter
    Réponses: 2
    Dernier message: 05/02/2017, 17h35
  2. Réponses: 2
    Dernier message: 19/05/2015, 08h52
  3. Python 3.3 Tkinter Entrées contrôlées
    Par luc pic dans le forum Tkinter
    Réponses: 11
    Dernier message: 04/10/2014, 13h38
  4. Projet ISN Python programme Piano Tkinter
    Par Biloute42 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/05/2014, 18h11
  5. Problème Python 2.7 Tkinter
    Par nicolivier dans le forum Général Python
    Réponses: 4
    Dernier message: 23/03/2013, 19h32

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