【问题标题】:PYTHON SQLITE3 DELETE FROM LISTPython SQLITE3 从列表中删除
【发布时间】:2020-12-15 07:52:32
【问题描述】:

我想删除 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

【问题讨论】:

  • print(secilen[0]) 返回什么?您还必须将按钮的 command=randevuSil() 更改为 command=randevuSil
  • 用于调试。我只是想看看什么是 secilen[0] 它返回 ()
  • 返回什么?
  • 只是“()”而已
  • 那是问题吧?它不返回任何东西,c.execute("DELETE FROM randevular WHERE rowid = (?)", (secilen[0] + 1,)) 会报错,因为secilen[0] 是空的或什么的

标签: function tkinter sql-delete newforms


【解决方案1】:

快速阅读的两种可能性:

  • secilen = randevuListesi.curselection() 行可能需要在 randevuSil() 中,而不是作为设置的一部分。
  • 设置按钮时,command=中的()应省略:
    btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil)
    
    否则,该函数将作为设置的一部分调用(当尚未选择任何内容时)而不是在单击按钮时调用。

【讨论】:

  • “secilen = randevuListesi.curselection() 行可能需要在 randevuSil() 中,而不是作为设置的一部分。”一开始,以前就是这样。我想,如果我先列出数据,那不会有问题。但它没有奏效。 btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil()) 但没用
  • 你需要解决这两个问题。
猜你喜欢
  • 2022-09-27
  • 1970-01-01
  • 2020-08-31
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多