删除函数不能正常工作python tkinter sq

2024-05-16 20:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建学生管理器,最后添加的函数是从列表框中删除学生。如果我删除列表框中间的某个学生,就会出现问题。它工作一次,那么我就不能删除代替已删除学生的学生。我想是索引的问题,但我不知道具体是什么。 每次我在列表框中用鼠标点击学生时,加载功能就会被激活。你知道吗

from tkinter import *
from tkinter import ttk
import sqlite3
from PIL import Image, ImageTk
import tkinter.filedialog

class StudentManager :
    db_conn = 0
    theCursor = 0
    curr_student = 0


    def setup_db(self):
        self.db_conn = sqlite3.connect('student.db')
        self.theCursor = self.db_conn.cursor()

        try:
            self.db_conn.execute("CREATE TABLE if not exists Students(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, FName TEXT NOT NULL, LName TEXT NOT NULL, Telefon TEXT NOT NULL, Wiek TEXT NOT NULL, PName TEXT NOT NULL);")

            self.db_conn.commit()

        except sqlite3.OperationalError:
            print("ERROR : Table not created")


    def dodaj_student(self):
        self.db_conn.execute("INSERT INTO Students (FName, LName, Telefon, Wiek, PName)" +
                                                   "VALUES ('" +
                                                   self.imie_value.get() + "', '" +
                                                   self.nazwisko_value.get() + "', '" +
                                                   self.telefon_value.get() + "', '" +
                                                   self.wiek_value.get() + "', '" +
                                                  self.imierodzica_value.get() + "')")



        self.imie.delete(0, "end")
        self.nazwisko.delete(0, "end")
        self.telefon.delete(0, "end")
        self.wiek.delete(0, "end")
        self.imierodzica.delete(0, "end")

        self.update_listbox()

    def load_student(self, event=None):
        lb_widget = event.widget
        index = str(lb_widget.curselection()[0] + 1)  #????
        index2 = str(lb_widget.curselection()[0])
        self.curr_student = index
        self.curr_student2 = index2

        try:
            result = self.theCursor.execute("SELECT ID, FName, LName, Telefon, Wiek, PName FROM Students WHERE ID=" + index)

            for row in result:

                stud_id = row[0]
                stud_fname = row[1]
                stud_lname = row[2]
                stud_telefon = row[3]
                stud_wiek = row[4]
                stud_pname = row[5]

                self.imie_value.set(stud_fname)
                self.nazwisko_value.set(stud_lname)
                self.telefon_value.set(stud_telefon)
                self.wiek_value.set(stud_wiek)
                self.imierodzica_value.set(stud_pname)

        except sqlite3.OperationalError:
            print("The Table Doesn't Exist")

        except:
            print("2 : Couldn't Retrieve Data From Database")



    def update_listbox(self):

        self.list_box.delete(0, END)

        try:
            result = self.theCursor.execute("SELECT ID, FName, LName, Telefon, Wiek, PName FROM Students")

            for row in result:
                stud_id = row[0]
                stud_fname = row[1]
                stud_lname = row[2]
                stud_telefon = row[3]
                stud_wiek = row[4]
                stud_pname = row[5]

                self.list_box.insert(stud_id,
                                stud_fname + " " +
                                stud_lname + " " +
                                stud_telefon + " " +
                                stud_wiek + " " +
                                stud_pname)

        except sqlite3.OperationalError:
            print("The Table Doesn't Exist")

        except:
            print("1: Couldn't Retrieve Data From Database")


    def delete_student(self):

        try:
            self.db_conn.execute("DELETE FROM Students WHERE ID=" + self.curr_student)
            self.db_conn.commit()

        except sqlite3.OperationalError:
            print("Data couldn't be Deleted")

        self.imie.delete(0, "end")
        self.nazwisko.delete(0, "end")
        self.telefon.delete(0, "end")
        self.wiek.delete(0, "end")
        self.imierodzica.delete(0, "end")

        self.update_listbox()



    def __init__(self, root):

        self.window_is_open = False
        self.notatnik_window = False
        root.title("Student Manager")
        root.geometry("340x480")

        # ------ 1st Row ------
        imie_label = Label(root, text="Imie")
        imie_label.grid(row=0, column=0, padx=10, pady=10, sticky=W)

        self.imie_value = StringVar(root, value="")
        self.imie = ttk.Entry(root,
                                textvariable=self.imie_value)
        self.imie.grid(row=0, column=1, padx=10, pady=10, sticky=W)

        nazwisko_label = Label(root, text="Nazwisko")
        nazwisko_label.grid(row=1, column=0, padx=10, pady=10, sticky=W)

        self.nazwisko_value = StringVar(root, value="")
        self.nazwisko = ttk.Entry(root,
                                        textvariable=self.nazwisko_value)
        self.nazwisko.grid(row=1, column=1, padx=10, pady=10, sticky=W)

        telefon_label = Label(root, text="Telefon")
        telefon_label.grid(row=2, column=0, padx=10, pady=10, sticky=W)

        self.telefon_value = StringVar(root, value="")
        self.telefon = ttk.Entry(root,
                                textvariable=self.telefon_value)
        self.telefon.grid(row=2, column=1, padx=10, pady=10, sticky=W)

        wiek_label = Label(root, text="Wiek")
        wiek_label.grid(row=3, column=0, padx=10, pady=10, sticky=W)

        self.wiek_value = StringVar(root, value="")
        self.wiek = ttk.Entry(root,
                    textvariable=self.wiek_value)
        self.wiek.grid(row=3, column=1, padx=10, pady=10, sticky=W)

        imierodzica_label = Label(root, text="Imie rodzica")
        imierodzica_label.grid(row=4, column=0, padx=10, pady=10, sticky=W)

        self.imierodzica_value = StringVar(root, value="")
        self.imierodzica = ttk.Entry(root,
                                    textvariable=self.imierodzica_value)
        self.imierodzica.grid(row=4, column=1, padx=10, pady=10, sticky=W)


        self.submit_button = ttk.Button(root, width=23,
                                        text="Dodaj",
                                        command = lambda: self.dodaj_student())
        self.submit_button.grid(row=5, column=0, padx=10, pady=10, sticky=W)

        self.edit_button = ttk.Button(root, width=23,
                                        text="Edytuj",
                                        command = lambda: self.update_student())

        self.edit_button.grid(row=5, column=1, padx=10, pady=10, sticky=W)


        self.more_button = ttk.Button(root, width=23,
                                        text="Wiecej",
                                        command = lambda: self.more_student())
        self.more_button.grid(row=6, column=0, padx=10, pady=10, sticky=W)

        self.delete_button = ttk.Button(root, width=23,
                                        text="Usun",
                                        command = lambda: self.delete_student())
        self.delete_button.grid(row=6, column=1, padx=10, pady=10, sticky=W)

        scrollbar = Scrollbar(root)

        self.list_box = Listbox(root)
        self.list_box.bind('<<ListboxSelect>>', self.load_student)
        self.list_box.insert(1, "Students Here")
        self.list_box.grid(row=7, column=0, columnspan=5, padx=10, pady=10, sticky=W+E)



        self.setup_db()

        self.update_listbox()




root = Tk()
studManager = StudentManager(root)
root.mainloop()

Tags: selfdbvaluecolumnrootdeletestudentgrid