[Python] não consigo deletar uma linha, sempre deleta a tabela toda. Tkinter [fechada]

Discussão em 'Python' iniciado por Stack, Setembro 23, 2024.

  1. Stack

    Stack Membro Participativo

    Estou com problema na hora de deletar. Quero deletar uma linha da tabela e sempre quando deleto, apaga a tabela toda.

    Já foi feito diversas tentativas, e eu não consigo fazer isso rodar certo

    import tkinter
    from tkinter import *
    from tkinter import ttk
    import sqlite3
    from tkinter import messagebox as mb
    from tkinter.filedialog import askopenfilename
    from tkinter.simpledialog import askinteger

    def menu0():
    print('novo menu')

    def menu1():
    nome = askopenfilename()

    def sobre():
    print('JMS - Guincho [...]')

    class consulta():
    def new(self):
    self.new_window = tkinter.Toplevel(window)
    self.new_window.title('JMS - Detalhes')
    self.new_window.geometry("700x400")
    self.new_window.configure(background='#bfbcbb')
    self.j_windowConsulta()
    self.btnConsulta1()
    print('Janela de consulta aberta com sucesso!')

    def close(self):
    self.new_window.destroy()
    print('Janela de consulta fechada com sucesso!')

    def j_windowConsulta(self):
    self.fConsulta2 = Frame(self.new_window, bg='#e3e3e3') # type: ignore
    self.fConsulta2.place(relx=0.02, rely=0.02, relwidth=0.96, relheight=0.46) # x=horizontal, y=vertical

    self.fConsulta2 = Frame(self.new_window) # type: ignore
    self.fConsulta2.place(relx=0.02, rely=0.5, relwidth=0.96, relheight=0.46)

    def importation(self):
    self.startSql()


    def btnConsulta1(self):
    self.btnDetalhe = Button(self.new_window, text="<< Voltar", bd=0.5, bg='#e3e3e3', font=('tahoma', 8), command=self.close)
    self.btnDetalhe.place(relx=0.03, rely=0.03, relwidth=0.07, relheight=0.05)

    # self.tableClient.bind("<Double-2>", self.doubleClick1)

    window = Tk()

    menu0 = Menu(window)
    window.config(menu=menu0)
    filemenu = Menu(menu0)
    menu0.add_cascade(label='Arquivo', menu=filemenu)
    filemenu.add_command(label='Novo', command=menu0)
    filemenu.add_command(label='Salvar', command=menu0)
    filemenu.add_command(label='Configuração', command=menu0)
    filemenu.add_separator()
    filemenu.add_command(label="Sair", command=window.quit)

    helpmenu = Menu(menu0)
    menu0.add_cascade(label='Ajuda', menu=helpmenu)
    helpmenu.add_command(label='Sobre', command=sobre)
    helpmenu.add_command(label='Contato', command=sobre)
    helpmenu.add_command(label='Suporte', command=sobre)

    ######################################################################################################################

    class operation():
    def clean(self):
    self.cEntry.delete(0, END)
    self.cName.delete(0, END)
    self.cPhone.delete(0, END)
    self.cCity.delete(0, END)
    self.cCar.delete(0, END)
    self.cCod.delete(0, END)
    self.cDate.delete(0, END)
    self.cCorCar.delete(0, END)

    def startSqlt(self):
    self.conn = sqlite3.connect("cliente.bd", timeout=5)
    self.cursor = self.conn.cursor()

    print('Conectado com sucesso!')

    def finishSqlt(self):
    self.conn.close()

    def createTable(self):
    self.startSqlt()
    print('Conectado com sucesso!')
    self.cursor.execute("""
    CREATE TABLE IF NOT EXISTS cliente (
    codigo,
    nome_cliente CHAR(40),
    telefone INTEGER,
    cidade CHAR,
    placa CHAR,
    veiculo CHAR,
    data CHAR,
    cor CHAR
    );
    """)

    self.conn.commit()
    print("Banco criado com sucesso")
    self.finishSqlt()

    def adicionar(self):
    self.startSqlt()
    self.variaveis()
    self.cursor.execute(""" INSERT INTO cliente (data, codigo, nome_cliente, telefone, cidade, veiculo, cor, placa)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?)""", (
    self.data,
    self.codigo,
    self.nome,
    self.telefone,
    self.cidade,
    self.carro,
    self.cor,
    self.placa
    ))

    self.conn.commit()
    self.finishSqlt()
    self.selectTable()

    def selectTable(self):
    self.tableClient.delete(*self.tableClient.get_children())
    self.startSqlt()
    lista = self.cursor.execute("""
    SELECT codigo, data, nome_cliente, telefone, cidade, veiculo, cor, placa FROM cliente
    ORDER BY nome_cliente ASC; """)

    for i in lista:
    self.tableClient.insert("", END, values=i)

    self.finishSqlt()

    def variaveis(self):
    self.codigo = self.cCod.get()
    self.nome = self.cName.get()
    self.telefone = self.cPhone.get()
    self.cidade = self.cCity.get()
    self.placa = self.cEntry.get()
    self.carro = self.cCar.get()
    self.data = self.cDate.get()
    self.cor = self.cCorCar.get()

    def doubleClick(self, event):
    self.clean()
    self.tableClient.selection()

    for n in self.tableClient.selection():
    col1, col2, col3, col4, col5, col6, col7, col8 = self.tableClient.item(n, 'values')
    self.cDate.insert(END, col1)
    self.cCod.insert(END, col2)
    self.cName.insert(END, col3)
    self.cPhone.insert(END, col4)
    self.cCity.insert(END, col5)
    self.cCar.insert(END, col6)
    self.cCorCar.insert(END, col7)
    self.cEntry.insert(END, col8)

    def delete(self):
    # self.conn = sqlite3.connect("cliente.bd")
    self.startSqlt()
    self.cursor.execute("DELETE FROM cliente WHERE codigo = ?", (self.codigo,))
    print('DELETADO COM SUICESSo')
    self.conn.commit()
    self.finishSqlt()
    # elf.clean()
    self.selectTable()

    class app(operation, consulta):
    def __init__(self):
    self.window = window
    self.jan()
    self.f_jan()
    self.wbtnf1()
    self.tableFrameTwo()
    self.startSqlt()
    self.createTable()
    self.selectTable()
    window.mainloop()

    def jan(self): # janela
    self.window.title('JMS Cadastro - Guincho')
    self.window.maxsize(width=1024, height=1024)
    self.window.configure(background='#bfbcbb')
    self.window.resizable(False, False)
    self.window.geometry("1024x600")

    def f_jan(self):
    self.fOne = Frame(self.window, bg='#e3e3e3') # type: ignore
    self.fOne.place(relx=0.02, rely=0.02, relwidth=0.96, relheight=0.46) # x=horizontal, y=vertical

    self.fTwo = Frame(self.window) # type: ignore
    self.fTwo.place(relx=0.02, rely=0.5, relwidth=0.96, relheight=0.46)

    def wbtnf1(self):
    self.btnSearch = Button(self.fOne, text="Buscar", bd=0.5, bg='#e3e3e3', font=('tahoma', 8))
    self.btnSearch.place(relx=0.14, rely=0.20, relwidth=0.07, relheight=0.07)

    self.btnClear = Button(self.fOne, text="Limpar", bd=0.5, bg='#d1cc3d', font=('tahoma', 8), command=self.clean)
    self.btnClear.place(relx=0.22, rely=0.20, relwidth=0.09, relheight=0.07) # 0.1 é 10% da esqueda pra direita

    # BTN DA DIREITA

    self.btnConsulta = Button(self.fOne, text="CONSULTAR", bd=0.5, font=('tahoma', 8), command=self.new)
    self.btnConsulta.place(relx=0.87, rely=0.1, relwidth=0.1, relheight=0.2)

    self.btnNew = Button(self.fOne, text="Adicionar", bd=0.5, bg='#396e31', fg='white', font=('tahoma', 8),
    command=self.adicionar)
    self.btnNew.place(relx=0.68, rely=0.40, relwidth=0.09, relheight=0.07)

    self.btnModify = Button(self.fOne, text="Modificar", bd=0.5, bg='#e3e3e3', font=('tahoma', 8))
    self.btnModify.place(relx=0.78, rely=0.40, relwidth=0.09, relheight=0.07)

    self.btnDelete = Button(self.fOne, text="Deletar", bd=0.5, bg='#a3352f', fg='white', font=('tahoma', 8),
    command=self.delete)
    self.btnDelete.place(relx=0.88, rely=0.40, relwidth=0.09, relheight=0.07)

    # label cod
    self.lCod = Label(self.fOne, text='Código', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lCod.place(relx=0.03, rely=0.1)

    self.cCod = Entry(self.fOne)
    self.cCod.place(relx=0.03, rely=0.20, relwidth=0.10)

    # DATE
    self.lDate = Label(self.fOne, text='Data', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lDate.place(relx=0.03, rely=0.30)

    self.cDate = Entry(self.fOne)
    self.cDate.place(relx=0.03, rely=0.40, relwidth=0.10)

    # entry do Plate Car
    self.lCodigo = Label(self.fOne, text='Placa', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lCodigo.place(relx=0.80, rely=0.50)

    # input do Plate Car
    self.cEntry = Entry(self.fOne)
    self.cEntry.place(relx=0.80, rely=0.60)

    # name label
    self.lName = Label(self.fOne, text='Nome do cliente', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lName.place(relx=0.03, rely=0.50)

    # input do name
    self.cName = Entry(self.fOne)
    self.cName.place(relx=0.03, rely=0.60, relwidth=0.4)

    # phone label
    self.lPhone = Label(self.fOne, text='Telefone', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lPhone.place(relx=0.03, rely=0.7)

    # input do phone
    self.cPhone = Entry(self.fOne)
    self.cPhone.place(relx=0.03, rely=0.8, relwidth=0.4)

    # city label
    self.lCity = Label(self.fOne, text='Cidade', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lCity.place(relx=0.5, rely=0.7)

    # input do city
    self.cCity = Entry(self.fOne)
    self.cCity.place(relx=0.5, rely=0.8, relwidth=0.47)

    # car MODEL
    self.corCar = Label(self.fOne, text='Cor', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.corCar.place(relx=0.65, rely=0.5)

    self.cCorCar = Entry(self.fOne)
    self.cCorCar.place(relx=0.65, rely=0.6)

    # car label
    self.lCar = Label(self.fOne, text='Carro', bg='#e3e3e3', font=('tahoma', 8, 'bold'))
    self.lCar.place(relx=0.5, rely=0.5)

    # input do car
    self.cCar = Entry(self.fOne)
    self.cCar.place(relx=0.5, rely=0.6, relwidth=0.12)

    def tableFrameTwo(self):
    self.tableClient = ttk.Treeview(self.fTwo, height=2, column=("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8"))
    self.tableClient.heading("#0", text="")
    self.tableClient.heading("#1", text="Data")
    self.tableClient.heading("#2", text="Cod. do cliente")
    self.tableClient.heading("#3", text="Nome do cliente")
    self.tableClient.heading("#4", text="Telefone")
    self.tableClient.heading("#5", text="Cidade")
    self.tableClient.heading("#6", text="Carro/Modelo")
    self.tableClient.heading("#7", text="Cor")
    self.tableClient.heading("#8", text="Placa")

    self.tableClient.column("#0", width=-50, anchor=CENTER)
    self.tableClient.column("#1", width=10, anchor=CENTER)
    self.tableClient.column("#2", width=20, anchor=CENTER)
    self.tableClient.column("#3", width=80, anchor=CENTER)
    self.tableClient.column("#4", width=20, anchor=CENTER)
    self.tableClient.column("#5", width=100, anchor=CENTER)
    self.tableClient.column("#6", width=40, anchor=CENTER)
    self.tableClient.column("#7", width=20, anchor=CENTER)
    self.tableClient.column("#8", width=20, anchor=CENTER)

    self.tableClient.place(relx=0.01, rely=0.1, relwidth=0.94, relheight=0.85)

    self.bRolagem = Scrollbar(self.fTwo, orient='vertical')
    self.tableClient.configure(yscroll=self.bRolagem.set)
    self.bRolagem.place(relx=0.96, rely=0.1, relwidth=0.04, relheight=0.85)

    self.tableClient.bind("<Double-1>", self.doubleClick)

    app()

    Continue reading...

Compartilhe esta Página