PYTHON SQLITE3 УДАЛИТЬ ИЗ СПИСКА

Я хочу удалить данные из выбранных в ListBox. Я все перепробовал, но не работает. Я пробовал в простом файле. Это сработало. Я написал здесь тот же код, но он не работает. Я застрял на два дня. Пожалуйста помоги.

from tkinter import *
import sqlite3
from tkinter import messagebox
import randevuEkleme as fRE
from tkcalendar import *


def randevularFormunuAc():
    root = Tk()
    root.title("Randevu Listesi Formu")
    root.geometry("750x500")

    randevuListesi = Listbox(root, width=50, bg="yellow", selectmode=SINGLE)

    takvim = Calendar(root, selectmode="day", year=2020, month=5, day=22)
    takvim.grid(row=0, column=0)
    randevuListesi.grid(row=1, column=0)
    secilen = randevuListesi.curselection()

    def randevulariListele(): #OK!
        con = sqlite3.connect('veri2.db')
        c = con.cursor()
        c.execute("SELECT * FROM randevular")
        liste = c.fetchall()
        con.commit()
        con.close()
        randevuListesi.delete(first=0,last=END)
        for i in liste:
        randevuListesi.insert(END,i)

    con = sqlite3.connect('veri2.db')
    c = con.cursor()
    c.execute("SELECT * FROM randevular")
    liste = c.fetchall()
    con.commit()
    con.close()
    for i in liste:
        randevuListesi.insert(END, i)

    def randevuSil():  
        con = sqlite3.connect('veri2.db')
        c = con.cursor()

        # Problem is HERE!!!   
        c.execute("DELETE FROM randevular WHERE rowid = (?)", (secilen[0] + 1,))
        
        # PROBLEMIS HERE!!!
        con.commit()
        con.close()

    btnListele = Button(root, text="Randevuları Listele",command=randevulariListele)
    btnRandevuEkle = Button(root,text="Randevu Ekle",command=fRE.randevuEklemeFormunuAc)
    btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil()) !!!!
    btnCikis = Button(root, text="Geri", command=root.quit)
    btnListele.grid(row=2,column=0)
    btnRandevuEkle.grid(row=2,column=1)
    btnRandevuSil.grid(row=2,column=2)
    btnCikis.grid(row=2,column=3)

    root.mainloop()

и сообщение об ошибке:

File "C:\Users\kutla\PycharmProjects\fizyoOta1.0\randevularFormu.py", line 43, in randevuSil
c.execute("DELETE FROM randevular WHERE rowid = (?)", (secilen[0] + 1,))
IndexError: tuple index out of range

1 ответ

Две возможности в быстром чтении:

  • Линия secilen = randevuListesi.curselection() наверное нужно быть в randevuSil() а не как часть установки.
  • При настройке кнопки () следует опустить в command=:
    btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil)
    
    В противном случае функция будет вызываться как часть настройки (когда ничего еще не выбрано), а не при нажатии кнопки.
Другие вопросы по тегам