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 :

Ouverture seconde fenêtre


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Par défaut Ouverture seconde fenêtre
    Bonjour,

    Je débute avec python (surtout son coté POO) et j'ai un petit problème tout bête dans un programme que je réalise.

    J'ai ici simplifié mon problème pour être plus clair.

    J'essaye simplement d'ouvrir une nouvelle fenêtre à partir d'une fenêtre de départ.

    Pour m'entrainer à la POO j'ai donc creer deux class d'objet une pour ma première fenêtre et une autre pour la seconde, afin plus tard de faire agir des methodes dessus :

    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 Fenetre1(Tk):
        def __init__(self):
            Tk.__init__(self)
            Button(self,text='Ouvrir Fenêtre',command= Menu2).grid(row=1,column=1)
            Button(self,text='Quitter',command=self.destroy).grid(row=1,column=2)
     
    class Fenetre2(Tk):
        def __init__(self):
            Tk.__init__(self)
            Button(self,text='Quitter',command=self.destroy).grid(row=1,column=2)
     
    def Menu2():
        App2=Fenetre2()
     
    if __name__ == '__main__':
        App=Fenetre1()
     
        App.mainloop()
    Ce code fonctionne bien cependant je me demandais si il était "convenable" de faire appelle à une fonction pour creer et instancier un objet de classe Fenetre2, ou si il y avait plus simple ou plus conventionnel.

    Je dois avouer que je suis un peu perdu avec toute les possibilité qu'offre la POO.

    Merci d'avance à ceux qui m'aiderons.

  2. #2
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Salut,
    Ce code fonctionne bien cependant je me demandais si il était "convenable" de faire appelle à une fonction pour creer et instancier un objet de classe Fenetre2, ou si il y avait plus simple ou plus conventionnel.
    je dirais que cela dépend de ce à quoi sert la la fenêtre <2>. Si c'est une sorte de <About/Help> alors pas de soucis.

    Et à vrai dire je trouve pas de cas ou cela apparait comme une infamie.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Par défaut
    Merci beaucoup pour cette réponse.

    En fait je m'apperçois qu'en envoyant directement Fenetre2 dans command du boutton celà fonctionne aussi.

    Alors ma nouvelle question va être encore plus trivial : c'est que fait réélement "command".

    J'étais passé par cette fonction parce que grace à celà je comprenait que "command" envoyait ma fonction qui créait le nouvel objet. Mais si on peu envoyer directement le nom de la classe je ne comprends plus vraiment ce qui se passe derrière cette option "command" ...
    Par ailleur si de plus vous pouviez me fournir quelques éclaircissements sur ce qui se passe derrière l'utilisation de la fonction lambda pour les fonctions avec arguments dans "command"...

    Merci d'avance

  4. #4
    Membre Expert 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
    Par défaut
    Bonsoir,

    Dans un premier temps je me permets de vous rappeler qu'il est fortement déconseiller d'utiliser deux instances Tkinter(), Toplevel est là pour cela.

    command :
    Tkinter est un wrapper Python pour Tcl/Tk, c'est a dire que c'est un emballage de Tcl/Tk (Interpréteur Tcl + interface Tk) pour Python.
    Avec command vous demandez donc le stockage d'un objet (fonction ou classe Python ici) dans votre objet Tcl/Tk Button.
    A partir de ce moment qu'importe à l'interpréteur que vous lui donniez une fonction ou une classe ? Lors de l’événement (event. ici un clic sur le bouton) il vous retourne l'objet Python.

    lambda:
    command=cb : Stocke l'objet callback dans le Widget.
    command=cb(x) : Idem mais est exécuter lors de la création du Widget. x est donc celui à la création du Widget.
    command=lambda: cb(x) : Stocke l'objet fonction lambda cb(x). La fonction est donc utilisée avec la valeur de x au moment de l'event.
    lambda est très important avec command. Testez cela à fond.

    @+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Par défaut
    Merci beaucoup, ça éclaire ma lanterne.

    Je vais lire la doc pour "Toplevel".

    Problème résolu.

    à +.

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

Discussions similaires

  1. Ouverture d'une seconde fenêtre avec passage de variable
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 06/11/2012, 08h50
  2. [MFC] problème ouverture de fenêtre
    Par pytpyt dans le forum MFC
    Réponses: 1
    Dernier message: 19/04/2006, 14h05
  3. [débutant] problème de maintien d'ouverture de fenêtre
    Par Antigonos Ier Gonatas dans le forum C++
    Réponses: 6
    Dernier message: 02/04/2006, 12h12
  4. Ouverture pleine fenêtre
    Par hisy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2006, 09h32
  5. ouverture de fenêtre ftp
    Par sparis dans le forum Développement
    Réponses: 3
    Dernier message: 29/10/2005, 02h44

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