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 :

librairie avec GUI


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Par défaut librairie avec GUI
    Ce programme contient du code frontal et principal pour une application de librairie avec une interface utilisateur graphique simple (GUI) construite avec la bibliothèque Tkinter. Bien que je ne puisse personnellement pas choisir Tkinter si je construisais une application réelle avec une interface utilisateur moderne, Tkinter me sert bien pour me familiariser avec la façon de me connecter aux bases de données (SQLite dans ce cas), de manipuler les données et de refléter la changements sur le front-end avec Python.
    le code est celui ci
    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
    import sqlite3
    class Database:
        def __init__(self,db):
            self.conn = sqlite3.connect(db)
            self.cur = self.conn.cursor()
            self.cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title TEXT, "
                        "author TEXT, year INTEGER, isbn INTEGER)")
            self.conn.commit()
     
        def insert(self,title, author, year, isbn):
            self.cur.execute("INSERT INTO book VALUES(NULL,?,?,?,?)", (title,author,year,isbn))
            self.conn.commit()
     
        def view(self):
            self.cur.execute("SELECT * FROM book")
            rows = self.cur.fetchall()
     
            return rows
     
        def search(self,title="", author="", year="", isbn=""):
            self.cur.execute("SELECT * FROM book WHERE title = ? OR author = ? OR year = ? "
                        "OR isbn = ?", (title, author, year, isbn))
            rows = self.cur.fetchall()
            #conn.close()
            return rows
     
        def delete(self,id):
            self.cur.execute("DELETE FROM book WHERE id = ?", (id,))
            self.conn.commit()
            #conn.close()
     
        def update(self,id, title, author, year, isbn):
            self.cur.execute("UPDATE book SET title = ?, author = ?, year = ?, isbn = ? WHERE id = ?", (title, author, year, isbn, id))
            self.conn.commit()
    -------------------------------------------le code frontend--------------------------------------------------
    Code:
    from tkinter import *
    from backend import  Database
     
    database = Database("books.db")
     
    class Window(object):  #creation d'une classe window
        def __init__(self,window): # initialisation de l'objet permettant à ce dernier de recevoir l'argument window lors de l'instanciation
            self.window = window   
            self.window.wm_title("The Book Store") #definition du titre de la fenetre window
     
            l1 = Label(window, text="Title",fg='red',bg='black') 
            l1.grid(row=0, column=0)
     
            l2 = Label(window, text="Author",fg='red',bg='black')
            l2.grid(row=0, column=2)
     
            l3 = Label(window, text="Year",fg='red',bg='black')
            l3.grid(row=1, column=0)
     
            l4 = Label(window, text="ISBN",fg='red',bg='black')
            l4.grid(row=1, column=2)
     
            self.title_text = StringVar()
            self.e1 = Entry(window, textvariable=self.title_text)
            self.e1.grid(row=0, column=1)
     
            self.author_text = StringVar()
            self.e2 = Entry(window, textvariable=self.author_text)
            self.e2.grid(row=0, column=3)
     
            self.year_text = StringVar()
            self.e3 = Entry(window, textvariable=self.year_text)
            self.e3.grid(row=1, column=1)
     
            self.ISBN_text = StringVar()
            self.e4= Entry(window, textvariable=self.ISBN_text)
            self.e4.grid(row=1, column=3)
     
            self.list1 = Listbox(window, height=6, width=35)
            self.list1.grid(row=2, column=0, rowspan=6, columnspan=2)
     
            self.list1.bind('<<ListboxSelect>>', self.get_selected_row)
     
            # now we need to attach a scrollbar to the listbox, and the other direction,too
            sb1 = Scrollbar(window)
            sb1.grid(row=2, column=2, rowspan=6)
            self.list1.config(yscrollcommand=sb1.set)
            sb1.config(command=self.list1.yview)
     
            b1 = Button(window, text="View all", width=12, command=self.view_command)
            b1.grid(row=2, column=3)
     
            b2 = Button(window, text="Search entry", width=12, command=self.search_command)
            b2.grid(row=3, column=3)
     
            b3 = Button(window, text="Add entry", width=12, command=self.add_command)
            b3.grid(row=4, column=3)
     
            b4 = Button(window, text="Update selected", width=12, command=self.update_command)
            b4.grid(row=5, column=3)
     
            b5 = Button(window, text="Delete selected", width=12, command=self.delete_command)
            b5.grid(row=6, column=3)
     
            b6 = Button(window, text="delete all", width=12, command=window.destroy)
            b6.grid(row=7, column=3)
     
            b6 = Button(window, text="Close", width=12, command=self.delete_all_command)
            b6.grid(row=8, column=3)
     
     
        def get_selected_row(self,event):   #the "event" parameter is needed b/c we've binded this function to the listbox
            try:
                index = self.list1.curselection()[0]
                self.selected_tuple = self.list1.get(index)
                self.e1.delete(0,END)
                self.e1.insert(END,self.selected_tuple[1])
                self.e2.delete(0, END)
                self.e2.insert(END,self.selected_tuple[2])
                self.e3.delete(0, END)
                self.e3.insert(END,self.selected_tuple[3])
                self.e4.delete(0, END)
                self.e4.insert(END,self.selected_tuple[4])
            except IndexError:
                pass                #in the case where the listbox is empty, the code will not execute
     
        def view_command(self):
            self.list1.delete(0, END)  # make sure we've cleared all entries in the listbox every time we press the View all button
            for row in database.view():
                self.list1.insert(END, row)
     
        def search_command(self):
            self.list1.delete(0, END)
            for row in database.search(self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get()):
                self.list1.insert(END, row)
     
        def add_command(self):
            database.insert(self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get())
            self.list1.delete(0, END)
            self.list1.insert(END, (self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get()))
     
        def delete_command(self):
            database.delete(self.selected_tuple[0])
            self.view_command()
     
        def update_command(self):
            #be careful for the next line ---> we are updating using the texts in the entries, not the selected tuple
            database.update(self.selected_tuple[0],self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get())
            self.view_command()
     
        def delete_all_command(self):
           self.list1.delete(0, END)         
           for row in database.view():
                self.list1.drop(END, row)
                self.view_command

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Par défaut
    ce matin j'ai essayé d'ajouter une nouvelle commande (delete_all_command) qui fonctionne de la même manière que le close et donc ne marche pas comme je le voudrais.
    je voudrai que cette commande supprime toute la librairie sans pour autant fermé la fenêtre
    si quelqu'un peut m'aider merci d'avance
    et si vous avez d'autres améliorations à me proposer je suis partant

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

    Citation Envoyé par cedrickab Voir le message
    je voudrai que cette commande supprime toute la librairie sans pour autant fermé la fenêtre
    Vous pouvez récupérer la liste des lignes de la table et vous les détruisez une à une dans une boucle en passant leurs identifiants à la méthode delete de la classe database.

    Ou vous cherchez s'il existe une instruction SQL/sqlite3 qui permet de détruire toutes les lignes de la table, vous créez une méthode ad hoc dans la classe database et vous l'appelez depuis le GUI.

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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Par défaut
    Bonjour j'ai essayé de faire cette methode mais elle fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def delete_all(self):
            self.cur.execute("DELETE FROM book")
    et dans le GUI Pour faire son appel j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     def delete_all_command(self):
            database.delete_all()
            self.view_command()
    mais toujours rien

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

    Citation Envoyé par cedrickab Voir le message
    j'ai essayé de faire cette methode mais elle fonctionne pas
    "elle ne fonctionne pas" est plutôt vague.
    Essayez de décrire le problème constaté, posez vous des questions sur ce que fait (ou pas) le code,...

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

Discussions similaires

  1. faire une librairie avec un projet
    Par youss_kkk dans le forum Visual C++
    Réponses: 7
    Dernier message: 04/05/2007, 13h23
  2. Programmation Windows Mobile avec GUI en C++
    Par Luke58 dans le forum Visual C++
    Réponses: 1
    Dernier message: 13/03/2007, 17h39
  3. probleme de librairie avec Dev-C++
    Par Miksimus dans le forum Dev-C++
    Réponses: 2
    Dernier message: 12/10/2005, 12h21
  4. Importer librairies avec LCC WIN32
    Par Jiraiya42 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 02/10/2005, 22h30
  5. Réponses: 2
    Dernier message: 30/09/2003, 15h57

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