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 :

Interface utilisateur pour l'emprunt et le retour de livres.


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Interface utilisateur pour l'emprunt et le retour de livres.
    Bonsoir à tous,

    Je suis actuellement en apprentissage de Python , je souhaite réalisé une interface utilisateur pour l'emprunt et le retour de livres.
    J'ai réalisé une première version qui fonctionne mais assez médiocre , et je voudrais ainsi améliorer l'interface.

    Dans une première version , j'essaie d'ouvrir des frames à partir de classes dynamiques qui sont liées à des boutons sur une fenêtre principale , mais j'ai encore des erreurs
    notamment avec tkinter(testMat.py) , ensuite je souhaite faire la même chose avec une liste déroulante, mais je bloque également (running.py) , pourriez-vous s'il vous plait
    m'aider à avancer dans ce projet ?

    testMat.py
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    from abc import ABC , abstractmethod
    from tkinter import *
    from datetime import datetime
    from time import strftime
     
    class Category(ABC,Tk):
        def __init__(self,name,id):
            self.name=name
            self.id =id
            self.parent = "i'm a parent"
            Tk.__init__(self,self.parent)
            #self.controller = controller
     
     
        @abstractmethod
        def show(self):
            pass
     
    class ImplCategory(Category): # héritage multiple 
        def _init_(self,name,id):
            super(Category)
            #self.name = name
            #self.id=id
     
     
        def show(self):
     
            Frame1 = Frame(self, borderwidth = 2 , relief =GROOVE, bg = "black")   
            Button1 = Button(Frame1, text = "OK!", width = 10)
            Button1.pack() 
            Frame1.tkraise()
            print("i'm a custom category")
     
    Mathematique = ImplCategory("Mathematique",0)
    Astrophysique = ImplCategory("Astrophysique",1)
    Electromagnetique = ImplCategory("Electromagnetique",2)
     
    class Fen_principale(Tk):
     
        def __init__(self, *args, **kwargs):
            Tk.__init__(self, *args, **kwargs)
            #creation du container qui représente la page de base
            container = Frame(self)
            container.pack(side="top", fill="both", expand=True)
            container.grid_rowconfigure(0 , weight=1)
            container.grid_columnconfigure(0, weight=1)
           #===============================creation d'un menu et sous menu=========================================
            self.biblio_menu = Menu(self)
            self.sous_men = Menu(self.biblio_menu, tearoff=0) #creation d'un sous menu
            self.biblio_menu.add_cascade(label="Menu",menu=self.sous_men) # ajout du sous menu au menu
            self.sous_men.add_command(label="Quitter", command = self.quitter) # ajout des commandes
            self.sous_men.add_command(label="Connexion Admin", command = self.admin)
            self.biblio_menu.add_command(label="Information",command=self.helpp)
            self.biblio_menu.add_command(label="Retour", command = self.retour_livre)
            self.config(menu = self.biblio_menu) # permet de configurer le menu
            # le menu doit toujours être defini dans une fenetre de Tk , jamais dans un Frame...
     
            self.frames = {}
     
            for F in (BibliothequeUL,Mathematique,Astrophysique,Electromagnetique):
                page_name=F.__name__
                frame = F(parent=container,controller=self)
                self.frames[page_name]= frame
     
                #faire apparaitre les pages au même endroit
                frame.grid(row=0, column=0, sticky="nsew")
     
            self.affich_fenetre("BibliothequeUL")
     
     
     
        def affich_fenetre(self,page_name):
            #affichage d'une fenêtre avec le nom donnee dans la fonction
     
            frame = self.frames[page_name]
            frame.tkraise()
            #======= definition des fonctions=====================================    
        def admin(self):
            pass
     
        def retour_livre(self):
            pass
     
        def quitter(self):
            self.destroy()
     
        def helpp(self):
            print("please place your student card")
     
    class BibliothequeUL(Frame):
     
        def __init__(self, parent, controller):
            Frame.__init__(self,parent)
            self.controller = controller
     
            w,h = 800, 500
     
            self.image = PhotoImage(file='female.png', master=self)
     
            self.canvas = Canvas(self, width = w, height = h, scrollregion = (0, 0, 1000,1000 ))
     
            self.canvas.pack(fill ="both" , expand=True)
     
            self.canvas.create_image((w//2 , h//2), image = self.image)
     
            self.logo = PhotoImage(file='logo1.png', master = self)
            logo_label= Label(self.canvas , image = self.logo)
            logo_label.place( y = 650)
     
              #===================création d'un scrollbar pour le canva===============================
     
            #scl = Scrollbar(self.canvas, orient ="vertical")
            #scl.config(command = self.canvas.yview)
            #self.canvas.config(yscrollcommand = scl.set)
            #scl.pack(side ="right", fill="y"
            #creation d'un label et placement dans la page 
            label1 = Label(self.canvas, text="Matieres" , font = 'corbel',fg='white',bg='#DAA520')
            label1.pack(side = "top" , fill = "x")                                     
            #label1.grid(row = 0 , sticky ="nsew")
            #self.labPlace(label1)
     
            #===================creation des boutons============================
            mathButton = Button(self.canvas, text ="Mathematiques", width = 30 ,command = Mathematique.show(),bg ="#DAA520")
            phyButton = Button(self.canvas, text ="AstroPhysique", width=30 ,command = Astrophysique.show() ,bg ="#DAA520")
            elecButton = Button(self.canvas, text ="Electromagnetisme", width =30, command = Electromagnetique.show(),bg ="#DAA520")
            #optButton = Button(self.canvas, text ="Optique",width=30, command =lambda: controller.affich_fenetre("Optique"),bg ="#DAA520")
     
            #===================placement des boutons avec l'instruction grid=================
     
            #mathButton.grid(row = 300 , sticky = E)
            #phyButton.grid(row =301 , sticky =E)
            #elecButton.grid(row = 302, sticky=E)
            #optButton.grid(row = 303, sticky = E)
     
            mathButton.place( x = 600 , y = 30)
            phyButton.place( x = 600 , y = 60)
            elecButton.place( x = 600 , y = 90)
            #optButton.place( x = 600 , y = 120)
     
            #====================Affichage de la date courante et du temps====================
            Dframe = Frame(self.canvas, borderwidth = 2, relief = GROOVE, bg="black")
            Dframe.pack(side = "bottom")
            #label_date= Label(Dframe, text = "Date "+strftime('%Y-%m-%d' , datetime.now()))
            label_date = Label(Dframe , text = datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
            label_date.pack()
     
     
     
     
     
     
     
     
     
     
     
     
    if __name__=="__main__":
     
        app = Fen_principale()
        app.title("Bibliothèque Universitaire")
        app.geometry("800x600+300+500")
        app.mainloop()
     
        #c = ImplCategory("tata")
        #c.mainloop()
        #c.show()
        #print(c.parent)
    running.py
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    from abc import ABC , abstractmethod
    from tkinter import *
    from datetime import datetime
    from time import strftime
     
    class Category(ABC,Tk):
        def __init__(self,name,id):
            self.name=name
            self.id =id
            self.parent = "i'm a parent"
            Tk.__init__(self,self.parent)
            #self.controller = controller
     
     
        @abstractmethod
        def show(self):
            pass
     
     
     
     
     
     
    class ImplCategory(Category): # héritage multiple 
        def _init_(self,name,id):
            super(Category)
            #self.name = name
            #self.id=id
     
            #=======================Listebox pour les livres====================================
            liste1 = Listbox(self, width =50)
            for x in len(cat_tuple):
                liste1.insert(END, cat_tuple(x))
            liste1.pack( side = "left" , fill ="y")
            #==========================scrollbar pour la page et la liste========================
            list_scroll = Scrollbar(list_frame, orient ="vertical")
            list_scroll.config(command = liste1.yview)
            list_scroll.pack(side ="right", fill ="y")
     
            #===============configiration du scrollbar============================
            liste1.config(yscrollcommand = list_scroll.set)
     
     
        def show(self):
     
            Frame1 = Frame(self, borderwidth = 2 , relief =GROOVE, bg = "black")   
            Button1 = Button(Frame1, text = "OK!", width = 10)
            Button1.pack() 
            Frame1.tkraise()
            print("i'm a custom category")
     
     
    Mathematique = ImplCategory("Mathematique",0)
    Astrophysique = ImplCategory("Astrophysique",1)
    Electromagnetique = ImplCategory("Electromagnetique",2)
    Electronique = ImplCategory("Electronique",3)
    Informatique = ImplCategory("Informatique",4)
     
    cat_tuple = (Mathematique, Astrophysique, Electromagnetique, Electronique, Informatique,)
    class Fen_principale(Tk):
     
        def __init__(self, *args, **kwargs):
            Tk.__init__(self, *args, **kwargs)
            #creation du container qui représente la page de base
            container = Frame(self)
            container.pack(side="top", fill="both", expand=True)
            container.grid_rowconfigure(0 , weight=1)
            container.grid_columnconfigure(0, weight=1)
           #===============================creation d'un menu et sous menu=========================================
            self.biblio_menu = Menu(self)
            self.sous_men = Menu(self.biblio_menu, tearoff=0) #creation d'un sous menu
            self.biblio_menu.add_cascade(label="Menu",menu=self.sous_men) # ajout du sous menu au menu
            self.sous_men.add_command(label="Quitter", command = self.quitter) # ajout des commandes
            self.sous_men.add_command(label="Connexion Admin", command = self.admin)
            self.biblio_menu.add_command(label="Information",command=self.helpp)
            self.biblio_menu.add_command(label="Retour", command = self.retour_livre)
            self.config(menu = self.biblio_menu) # permet de configurer le menu
            # le menu doit toujours être defini dans une fenetre de Tk , jamais dans un Frame...
     
            self.frames = {}
     
            for F in cat_tuple:
                page_name= F
                frame = F(parent=container,controller=self)
                self.frames[page_name]= frame
     
                #faire apparaitre les pages au même endroit
                frame.grid(row=0, column=0, sticky="nsew")
     
            self.affich_fenetre("BibliothequeUL")
     
        def affich_fenetre(self,page_name):
            #affichage d'une fenêtre avec le nom donnee dans la fonction
     
            frame = self.frames[page_name]
            frame.tkraise()
            #======= definition des fonctions=====================================    
        def admin(self):
            pass
     
        def retour_livre(self):
            pass
     
        def quitter(self):
            self.destroy()
     
        def helpp(self):
            print("please place your student card")
     
    class BibliothequeUL(Frame):
     
        def __init__(self, parent, controller):
            Frame.__init__(self,parent)
            self.controller = controller
     
            w,h = 800, 500
     
            self.image = PhotoImage(file='female.png', master=self)
     
            self.canvas = Canvas(self, width = w, height = h, scrollregion = (0, 0, 1000,1000 ))
     
            self.canvas.pack(fill ="both" , expand=True)
     
            self.canvas.create_image((w//2 , h//2), image = self.image)
     
            self.logo = PhotoImage(file='logo1.png', master = self)
            logo_label= Label(self.canvas , image = self.logo)
            logo_label.place( y = 650)
     
              #===================création d'un scrollbar pour le canva===============================
     
            #scl = Scrollbar(self.canvas, orient ="vertical")
            #scl.config(command = self.canvas.yview)
            #self.canvas.config(yscrollcommand = scl.set)
            #scl.pack(side ="right", fill="y"
            #creation d'un label et placement dans la page 
            label1 = Label(self.canvas, text="Matieres" , font = 'corbel',fg='white',bg='#DAA520')
            label1.pack(side = "top" , fill = "x")                                     
            #label1.grid(row = 0 , sticky ="nsew")
            #self.labPlace(label1)
     
            #===================creation des boutons============================
            mathButton = Button(self.canvas, text ="Mathematiques", width = 30 ,command = Mathematique.show(),bg ="#DAA520")
            phyButton = Button(self.canvas, text ="AstroPhysique", width=30 ,command = Astrophysique.show() ,bg ="#DAA520")
            elecButton = Button(self.canvas, text ="Electromagnetisme", width =30, command = Electromagnetique.show(),bg ="#DAA520")
            #optButton = Button(self.canvas, text ="Optique",width=30, command =lambda: controller.affich_fenetre("Optique"),bg ="#DAA520")
     
            #===================placement des boutons avec l'instruction grid=================
     
            #mathButton.grid(row = 300 , sticky = E)
            #phyButton.grid(row =301 , sticky =E)
            #elecButton.grid(row = 302, sticky=E)
            #optButton.grid(row = 303, sticky = E)
     
            mathButton.place( x = 600 , y = 30)
            phyButton.place( x = 600 , y = 60)
            elecButton.place( x = 600 , y = 90)
            #optButton.place( x = 600 , y = 120)
     
            #====================Affichage de la date courante et du temps====================
            Dframe = Frame(self.canvas, borderwidth = 2, relief = GROOVE, bg="black")
            Dframe.pack(side = "bottom")
            #label_date= Label(Dframe, text = "Date "+strftime('%Y-%m-%d' , datetime.now()))
            label_date = Label(Dframe , text = datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
            label_date.pack()
     
     
     
     
     
     
     
     
     
     
     
     
    if __name__=="__main__":
     
        app = Fen_principale()
        app.title("Bibliothèque Universitaire")
        app.geometry("800x600+300+500")
        app.mainloop()
     
        #c = ImplCategory("tata")
        #c.mainloop()
        #c.show()
        #print(c.parent)
    Bien Cordialement
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Almamy224 Voir le message
    pourriez-vous s'il vous plait m'aider à avancer dans ce projet ?
    Dans votre code, il y a quelques coquilles mais vous utilisez des fonctionnalités un peu plus avancées que le débutant de base. Donc si vous avez des soucis, vous devriez être capable de les résumer en un exemple de quelques lignes plutôt que de nous demander de les deviner en lisant votre code.

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bien , Merci pour ta réponse

    Pour faire apparaître différentes fenêtres , j'utilise un dictionnaire de plusieurs frames , quand je configure les boutons pour les lancés , 1) c'est sans effet 2) les pages vides se lancent à la compilation.

    Je mélange sans doute l'héritage de Tk et l'héritage avec les frames. Un autre problème est qu'en utilisant cette méthode , j'ai une erreur du type : tkinter ne possède pas d'attribut __main__.

    Et enfin pour la méthode avec la listebox , je souhaite ensuite ouvrir ces mêmes pages lorsque l'on sélectionne le nom de la page dans la liste avec un event mais les problèmes précédents me posent des soucis.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Visiblement, vous n'avez pas trop compris ce que je vous ai suggéré alors bon courage.

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

Discussions similaires

  1. Aide sous Python 3.1
    Par david1865 dans le forum Général Python
    Réponses: 5
    Dernier message: 13/09/2010, 12h21
  2. aide programme python!
    Par ano33 dans le forum Général Python
    Réponses: 4
    Dernier message: 28/04/2010, 16h54
  3. aide exercice python
    Par cedric190985 dans le forum Général Python
    Réponses: 2
    Dernier message: 24/03/2010, 12h57
  4. Aide Syntaxe Python
    Par ziska dans le forum Général Python
    Réponses: 15
    Dernier message: 03/10/2009, 08h52
  5. Aide sur python et CGI dans un cas particulier
    Par Papaillou dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 11/04/2009, 17h37

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