programmation GUI
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

programmation GUI



  1. #1
    cedric125

    programmation GUI


    ------

    Ce programme contient du code frontend et backend pour une application de librairie avec une interface utilisateur graphique simple (GUI) construite avec la bibliothèque Tkinter sur spyder (python)
    le code backend dabord (principale)
    Code:
    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
            
            
    
    #code for the GUI (front end)
    window = Tk()
    Window(window)
    
    window.mainloop()

    -----

  2. #2
    cedric125

    Re : programmation GUI

    ce matin j'ai essayé d'ajouter une nouvelle commande (delete_all_command) qui fonctionne de la même manière que le close.
    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

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 13h34
  2. Programmation
    Par invite540c9d2b dans le forum Électronique
    Réponses: 4
    Dernier message: 02/04/2010, 14h52
  3. programmation ST7
    Par inviteef27c66e dans le forum Électronique
    Réponses: 11
    Dernier message: 16/04/2008, 09h55
  4. Programmation
    Par invitedc812a96 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 2
    Dernier message: 03/01/2007, 18h31
  5. Programmation en C
    Par invite232dbe64 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 27/12/2006, 10h55