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 :

Plein écran et réactions des widgets Entry


Sujet :

Tkinter Python

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Résolu] Plein écran et réactions des widgets Entry
    Bonjour à tous,

    L'application que je développe est en Python(2.6)/Tkinter pour Linux(Ubuntu)/Windows XP. Les tests sont réalisés sous Ubuntu 9.04.

    Je n'arrive pas à avoir une application en plein écran (avec la commande overrideredirect ) et à ce que mes widgets Entry recoivent les signaux émis par le clavier.

    J'ai bien lu sur Internet que celà était dû à la commande overrideredirect elle-même qui retirait le Toplevel du gestionnaire de fenetre et que du coup les signaux claviers étaient envoyés à la première fenetre derrière mon application en plein écran.

    J'ai essayé une astuce proposée par certains développeurs mais directement en script Tk pour Tcl, mais je n'ai pas réussi en Python.

    Avez vous des pistes à explorer car j'ai fouillé toutes les pages fournies par Google et l'API Tkinter, donc je n'ai même plus ATFG et RTFM comme solutions.

    Le code (partie interessante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.initializePremierePage()
            self.title("Les Clés du Code")
            self.configure(bg="#ffffbf")
            self.geometry(str(self.winfo_screenwidth())+"x"+str(self.winfo_screenheight())+"+0+0")
            self.overrideredirect(True)
            self.resizable(False,False)
            self.focus_set()
     
    etc ... on met des widgets Entry
    L'application marche sans problèmes sans le mode plein écran qui est voulu par les clients (mes parents en l'occurence =) =) ).

    En vous remerciant grandement d'avance,

    Brice Dudout

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 902
    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 902
    Points : 7 261
    Points
    7 261
    Par défaut
    self.overrideredirect(True)
    Peut-être que tu ne mets pas le nom de ta fenêtre Tk()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.root = Tk()
         self.root.overrideredirect(1)
    Sinon je ne vois pas

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ma classe dérive de Tkinter.Tk, donc ça fonctionne avec self.overrideredirect(True). Mon problème n'est pas d'avoir un plein écran, ça ça fonctionne.

    Le problème est que les widgets qui doivent réagir avec le clavier de répondent plus car ils ne recoivent plus les signaux envoyés par le clavier. Grossièrement il n'y a pas de curseur dans le champ texte et le texte va s'écrire dans netbeans.

    La bidouille essayée était de mettre un Toplevel dans un autre, mais ça ne fonctionne pas.

    Merci tout de même !

    Brice Dudout

  4. #4
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Pourrais-tu nous fournir un peu plus de code ?
    Exemple qui fonctionne :
    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
    # -*- coding: UTF-8-*-
    import Tkinter
     
    class Test(Tkinter.Tk):
        def __init__(self):
            Tkinter.Tk.__init__(self)
            self.title("Les Clés du Code")
            self.configure(bg="#ffffbf")
            self.geometry(str(self.winfo_screenwidth())+"x"+str(self.winfo_screenheight())+"+0+0")
            self.overrideredirect(True)
            self.resizable(False,False)
            self.focus_set()
            # Les Entry...
            for i in xrange(10):
                Tkinter.Entry(self).pack(fill=Tkinter.BOTH,expand=Tkinter.Y)
            Tkinter.Button(self,text="Quitter",command=quit).pack()
    app=Test()
    app.mainloop()

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Avec quel OS/GDM et quelle version de python/tk avez vous testé ce code ?

    Chez moi (Ubuntu 9.04/Python 2.6.2/GNOME 2.26.1), ce code ne permet pas de pouvoir écrire dans les entry, mais vous me rassurez en prouvant que c'est fonctionnel sous Windows.

    Je cherche donc toujours une solution =)

    En vous remerciant,

    Brice Dudout

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour bdudout,

    Il est nécessaire de créer tes widgets avant l'overrideredirect.

    Teste cela :

    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
    from Tkinter import *
     
    class MyApp:
    	def __init__(self, parent):
                def PleinEcran():
                    global wiGenerique
                    wiGenerique = Toplevel()
                    wiGenerique.geometry(str(root.winfo_screenwidth())+"x"+str(root.winfo_screenheight())+"+0+0")
                    EntryGenerique = Entry(wiGenerique)
                    EntryGenerique.pack()
                    Button(wiGenerique, text='Quitter', command=quit).pack(side=TOP)
     
                PleinEcran()
                wiGenerique.overrideredirect(True)
                wiGenerique.withdraw()
                wiGenerique.deiconify()
     
    root = Tk()
    myapp = MyApp(root)
    root.mainloop()
    @+

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Petite rectification mineure du lundi matin.

    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
    from Tkinter import *
     
    class MyApp:
    	def __init__(self, parent):
                def PleinEcran():
                    global wiGenerique
                    wiGenerique = Toplevel()
                    wiGenerique.withdraw()
                    wiGenerique.geometry(str(root.winfo_screenwidth())+"x"+str(root.winfo_screenheight())+"+0+0")
                    EntryGenerique = Entry(wiGenerique)
                    EntryGenerique.pack()
                    Button(wiGenerique, text='Quitter', command=quit).pack(side=TOP)
     
                PleinEcran()
                wiGenerique.overrideredirect(True)
                wiGenerique.deiconify()
    			
    root = Tk()
    myapp = MyApp(root)
    root.mainloop()
    Testé sous linux. Les Entry ne perdent pas la référence au gdm.
    A voir sous Windows mais je ne pense pas que cela prête a conséquence.

    @+

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup PauseKawa pour cette résolution très peu documentée sur Internet.

    Brice Dudout

  9. #9
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Pas de quoi : c'est un truc tordu (et sans doute obsolète dés la prochaine version de Tkinter ou la suivante).
    Par contre une vérification sous Windows n'est pas de trop.

    Un petit résolu ?

Discussions similaires

  1. Nommer dynamiquement des widgets ENTRY
    Par zevulko01 dans le forum Tkinter
    Réponses: 17
    Dernier message: 28/02/2014, 19h33
  2. Réponses: 9
    Dernier message: 08/07/2012, 18h36
  3. Réponses: 0
    Dernier message: 12/12/2009, 16h40
  4. [Ubuntu 8.04]Firefox : mode plein écran + disparition du gestionnaire des fenêtres
    Par MaliciaR dans le forum Applications et environnements graphiques
    Réponses: 14
    Dernier message: 24/08/2008, 05h57
  5. Mettre en plein écran des fenêtres, mais pas toutes !
    Par supertoms dans le forum VBA Access
    Réponses: 3
    Dernier message: 19/06/2008, 14h57

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