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 :

Class avec python et Tkinter


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut Class avec python et Tkinter
    Bonjour à tous,

    Je commence juste les class avec python, grâce à des tutos sur le net j'ai reussi à en faire une. Mais le principe du self m'echappe toujours un peu ...
    Je voulais aussi savoir si la class que je viens de faire est bien optimisée, car c'est quand même son but de base.

    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
    import tkinter as tk
     
    class color_button:
        def __init__(self):
            self.tag = None
        def widgets_selected(self,widget1,widget2):#widget is the selected
            self.disable(widget2)
            if widget1['text']=='yes':
                self.colorize(widget1,"green")
            else :
                self.colorize(widget1,"red")
            return      
        def disable(self,widget):
            widget['state']='disabled'
            return
     
        def colorize(self,widget,color):
            widget['bg']=color
            return
     
    react_button=color_button()        
     
    def action():
        react_button.widgets_selected(bouton1,bouton2)
        Question2=tk.Label(root,text="Quit ?").grid(row=2,column=0)
        bouton3=tk.Button(root,text='yes',command=root.destroy).grid(row=3,column=0)
        bouton4=tk.Button(root,text='no').grid(row=3,column=1)
     
    def action2():
        react_button.widgets_selected(bouton2,bouton1)
        Question2=tk.Label(root,text="Quit ?").grid(row=2,column=0)
        bouton3=tk.Button(root,text='yes',command=root.destroy).grid(row=3,column=0)
        bouton4=tk.Button(root,text='no').grid(row=3,column=1)
     
    root=tk.Tk()
    Question1=tk.Label(root,text='Ca va ?').grid(row=0,column=0)
    bouton1=tk.Button(root,text='yes',command=action)
    bouton1.grid(row=1,column=0)
    bouton2=tk.Button(root,text='no',command=action2)
    bouton2.grid(row=1,column=1)
    root.mainloop()
    Merci d'avance,

    Valentin.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Salut,

    Citation Envoyé par StabiloHB Voir le message
    Je voulais aussi savoir si la class que je viens de faire est bien optimisée, car c'est quand même son but de base.
    Je ne vois pas trop ce que vous cherchez à optimiser.

    Quand je lis votre code je vois que vous essayer de créer une relation entre les Button Yes/No plutôt que d'utiliser des Radiobutton qui ont déjà cette relation.
    Côté "class", quand vous débutez vous pouvez vous amuser à en construire partout (i.e. arriver à supprimer tout le code qui n'est pas dans une class). Mais à la base, une class sert à créer des objets qui seront semblable côté attributs/méthodes. Si vous définissez une class pour en utiliser qu'une seule instance, çà ne sert à pas grand chose (sinon pour faire joli mais optimisation s’accommode mal avec "joli").
    Puisqu'une class est un objet, son nom doit être un "nom" et non une action/"un verbe" comme "color_button" qu'il faut essayer de donner aux fonctions/méthodes.
    Dans votre code, la répétition est dans la création d'un Label qui contient une question associé à 2 (Radio)button qui attrapent les réponses.
    Vous pourriez vous amuser à créer une "class" héritant de Frame créant Label et Radiobutton associés ce serait un nouveau widget "composite".

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Bonjour,

    Merci de votre réponse.

    C'est pour le coter esthétique que j'utilise des boutons mais je suis d'accord les radio seraient plus simples...
    J'avais déjà pensé à cette idée de creer une frame avec une classe, je pense que j'y arriverai. Mais ce que je ne sais pas comment faire par la suite c'est un bouton Cancel qui ramenerait à l'étape supérieur, car ce sont des questions en cascade. Et avec l'histoire d'une frame par question j'arrive juste a recreer une frame donc rénitialiser toute la question...



    Valentin.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Citation Envoyé par StabiloHB Voir le message
    Mais ce que je ne sais pas comment faire par la suite c'est un bouton Cancel qui ramenerait à l'étape supérieur, car ce sont des questions en cascade. Et avec l'histoire d'une frame par question j'arrive juste a recreer une frame donc rénitialiser toute la question...
    Si vous ne postez pas de code... pas facile de comprendre les difficultés que vous rencontrez.

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Je voulais pas trop mettre de code car c'est très primitif ... Pour cela que je voudrai me mettre aux class

    Voici un exemple de frame de question :
    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
    import tkinter as tk
     
    def Page1():
            frame_page1=tk.Frame(root)
            frame_page1.grid(row=2,column=0)
            titre_question_1=tk.Label(frame_page1,text='Questions :',font='bold').grid(row=0,sticky='w',columnspan=2,ipadx=3,ipady=3)
            def question_1():
                frame_question_1=tk.Frame(frame_page1)
                frame_question_1.grid(row=1,column=0,sticky='w')
                def Cancel_question_1():
                    frame_question_1.destroy()
                    question_1()
                def question():
                    global organisation_yes_question_1,organisation_no_question_1
                    def answer_no_2():
                        organisation_no_question_12['bg']='red'
                        organisation_yes_question_12['state']='disabled'
                        print('Ah')
                        organisation_Cancel.grid(row=2,column=2)
                    def answer_yes_2():
                        organisation_yes_question_12['bg']='red'
                        organisation_no_question_12['state']='disabled'
                        print("oui c'est vrai qu'il fait mauvais temps")
                        organisation_Cancel.grid(row=2,column=2)
                    def answer_yes_1():
                        organisation_yes_question_1['bg']='green'
                        organisation_no_question_1['state']='disabled'
                        print("ok")
                        organisation_Cancel.grid(row=0,column=2)
                    def answer_no_1():
                        global organisation_yes_question_12,organisation_no_question_12
                        organisation_no_question_1['bg']='red'
                        organisation_yes_question_1['state']='disabled'
                        question_1_question_12=tk.Label(frame_question_1,text='a cause du mauvais temps ?',justify="left").grid(row=2,column=0,sticky='w',ipadx=3,ipady=3)
                        organisation_yes_question_12=tk.Button(frame_question_1,text='yes',command=answer_yes_2)
                        organisation_yes_question_12.grid(row=3,column=0,sticky='w')
                        organisation_no_question_12=tk.Button(frame_question_1,text='no',command=answer_no_2)
                        organisation_no_question_12.grid(row=3,column=1,sticky='w')
                        organisation_Cancel.grid(row=0,column=2)
                    question_1_question_1=tk.Label(frame_question_1,text='Salut, ça va ?',justify="left").grid(row=0,column=0,sticky='w',ipadx=3,ipady=3)
                    organisation_yes_question_1=tk.Button(frame_question_1,text='Yes',command=answer_yes_1)
                    organisation_yes_question_1.grid(row=1,column=0,sticky='w')
                    organisation_no_question_1=tk.Button(frame_question_1,text='No',command=answer_no_1)
                    organisation_no_question_1.grid(row=1,column=1,sticky='w')
                organisation_Cancel=tk.Button(frame_question_1,text='Cancel',command=Cancel_question_1)
                question()
            question_1()
     
    root=tk.Tk()
    Page1()
    root.mainloop()
    Merci pour votre temps.

    Valentin

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Essayez de visualiser votre code en prenant un peu de recul: vous devriez voir une sorte d'arborescence.
    Problème: vos données ont une structure d'arbre mais vous avez mélangé données et code sans séparer navigation dans l'arbre, opération sur chaque nœud,...
    Peut être que vous devriez commencer avec une structure plus simple genre liste de photo où vous avez deux boutons "next", "prev" pour naviguer et une seule opération "afficher" ?

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

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

Discussions similaires

  1. Interface graphique avec python et tkinter
    Par MrTGR57 dans le forum Tkinter
    Réponses: 0
    Dernier message: 23/04/2014, 17h10
  2. Snake avec Python 3.0 et Tkinter
    Par tonykart13 dans le forum Tkinter
    Réponses: 18
    Dernier message: 10/06/2012, 21h55
  3. Commencer avec les classes en Python
    Par Ismatus1 dans le forum Linux
    Réponses: 1
    Dernier message: 16/11/2011, 19h39
  4. La POO avec python Tkinter
    Par alberth dans le forum Tkinter
    Réponses: 2
    Dernier message: 06/05/2009, 14h53

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