SQLite Liste sorunu

SQLite ile ilk kez bir görsel arayüzlü program yapıyorum. Bu programı yaparken internetten sağdan soldan kod yardımı alıp yaptım ve bu ortaya çıktı. Aynı zamanda veri tabanını görüntülemekte istedim o yüzden def show(): fonksiyonunu internetden bakarak yaptım ancak bir problem vardı, liste -liste dediğime bakmayın entry ile yapıldı- silinmiyordu nasıl silerim bilmiyorum döngüde, amacım yenileme butonu koyup butonla önce silip sonra yazdırmaktı. Silemezsem nasıl kendisini sürekli yenileyen bir hale getiririm bilmiyorum yardım lazım.
Not: Özür dilerim biraz karışık üzerinde çok oynama yaptım sildim fln

import tkinter
from tkinter import *

def mk():
    cur.execute("CREATE TABLE IF NOT EXISTS inventory (urun TEXT,marka TEXT,kod INT)")

def add():
    urun = entry1.get()
    marka = entry2.get()
    kod = entry3.get()
    if urun == "":
        text = "Lütfen tüm alanları doldurunuz!"
    elif marka == "":
        text = "Lütfen tüm alanları doldurunuz!"
    elif kod == "":
        text = "Lütfen tüm alanları doldurunuz!"
    else:
        text="Veri Eklendi"
        cur.execute("INSERT INTO inventory VALUES (?,?,?)", (urun, marka, kod))
        con.commit()
        entry3.delete(0, END)
        entry2.delete(0, END)
        entry1.delete(0, END)

    l4.config(text=text)
    root.after(2000, lambda: l4.config(text=''))

def add2():
    kod = entry9.get()
    if kod == "":
        text = "Lütfen tüm alanları doldurunuz!"

    else:
        text = "Veri Kaldırıldı"
        query = "DELETE from inventory where kod = ?"
        cur.execute(query, (kod,))
        con.commit()
        entry9.delete(0, END)

    l4.config(text=text)
    root.after(2000, lambda: l4.config(text=''))



def onumber(char):
    return char.isdigit()

root = Tk()
root.geometry("1500x480")
root.title("Database Demo")
root.resizable(width=False, height=False)

con = sqlite3.connect("database.db")
cur = con.cursor()

validation = root.register(onumber)

def show():
    r_set = cur.execute('''SELECT * from inventory LIMIT 0,1000''');
    i = 0
    for inventory in r_set:
        for j in range(len(inventory)):
            global e1e
            e1e = Entry(root, width=10)
            e1e.place(x=30, y=450)
            e1e.grid(row=i, column=j)
            e1e.insert(END, inventory[j])
        i = i + 1

l4 = Label(root)
l4.place(x=430, y=200)
l4["font"] = ("Futura", 20)

label4 = Label(text = "Kaldır", font= ("Futura", 20))
label4.place(x = 1050, y = 4)

label7 = Label(text = "Ürün kodu giriniz:")
label7.place(x = 880, y = 80)
label7.config(padx=0)

entry9 = Entry(root, highlightthickness = 0, bd = 0, validate="key", validatecommand=(validation, '%S'))
entry9.place(x = 1000, y = 80, width=200, height=25)

button2 = Button(root, text = "Kaldır", command = add2, highlightthickness = 0, bd = 0, bg = "#828282", fg="white")
button2.place(x = 1080, y = 240)

label = Label(text = "Ekle", font= ("Futura", 20))
label.place(x = 600, y = 4)

label1 = Label(text = "Ürün adı giriniz:")
label1.place(x = 430, y = 40)
label1.config(padx=0)

label2 = Label(text = "Marka adı giriniz:")
label2.place(x = 430, y = 80)
label2.config(padx=0)

label3 = Label(text = "Ürün kodu giriniz:")
label3.place(x = 440, y = 120)
label3.config(padx=0)

entry1 = Entry(root, highlightthickness = 0, bd = 0)
entry1.place(x = 550, y = 40, width=200, height=25)

entry2 = Entry(root, highlightthickness = 0, bd = 0)
entry2.place(x = 550, y = 80, width=200, height=25)

entry3 = Entry(root, highlightthickness = 0, bd = 0, validate="key", validatecommand=(validation, '%S'))
entry3.place(x = 550, y = 120, width=200, height=25)

button1 = Button(root, text = "Ekle", command = add, highlightthickness = 0, bd = 0, bg = "#828282", fg="white")
button1.place(x = 640, y = 240)

mk()
root.mainloop()```

listbox yada treeview kullanarak databasedeki verileri görüntüleyebilirsiniz.

1 Beğeni

Merhaba çabanıza hayran kaldım. Beni yanlış anlama ama bu kod çok kötü yazılmış. baştan sona hatalı. class yapısı olması gerekiyor ve hata verdi.

116. satırda 
NameError: name 'infinite' is not defined
1 Beğeni

Katılıyorum akşam yardım ederim ama söylemeden de edemeyeceğim

import tkinter
from tkinter import *
from tkinter import ttk

Hadi ilk ikisini bilmeden yaptında 2.si 3.yü kapsamıyor mu

1 Beğeni

silmeyi unutmuşum düzenledim tekrar inceleyebilir misiniz? Daha önce öyle bir fonksiyon tanımlamıştım işe yaramayınca silmiştim 116.satırı atlamışım

ilk defa böyle bir kod yazıyorum tkinterla ve sqlite ile pek aram yok o yüzden fazla sorunlu

Kötü yazılmışdan kastım zaten tkinter veya sqflite değildi. class kullanılmamasıydı. bu şekilde kod yazılmaz. bu dediğim aşağılamak için değil. class kullanmayı öğrenmeniz için bi öneri yani.

1 Beğeni
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3


root = tk.Tk()
root.title("Database Demo")
root.config(padx=10, pady=10)

stilim = ttk.Style(root)
stilim.configure("TLabel", width=10, font=("Arial", 12), sticky="w")


def tablo_olustur():
    with sqlite3.connect("urunler.db") as db:
        db.execute("CREATE TABLE IF NOT EXISTS inventory (id INTEGER PRIMARY KEY, urun TEXT,marka TEXT,kod TEXT)")


def db_verileri():
    with sqlite3.connect("urunler.db") as db:
        return db.execute("select * from inventory").fetchall()


def db_kaydet():
    if not urun.get() or not marka.get() or not kod.get():
        messagebox.showwarning("Boş Alan Hatası", "Gerekli yerleri doldurunuz")
    else:
        with sqlite3.connect("urunler.db") as db:
            db.execute("insert into inventory VALUES(NULL,?,?,?)", (urun.get(), marka.get(), kod.get()))
            urun_adi_ent.delete(0, tk.END)
            marka_adi_ent.delete(0, tk.END)
            urun_kodu_ent.delete(0, tk.END)
            urun_adi_ent.focus()
    listele()


def listele():
    treeview.delete(*treeview.get_children())
    veriler = db_verileri()
    for veri in veriler:
        treeview.insert("", index=tk.END, values=(veri[0], veri[1], veri[2], veri[3]))


treeview_frame = ttk.Frame(root)
treeview_frame.grid(row=0, column=0)

scrollbar = ttk.Scrollbar(treeview_frame, orient="vertical")
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
columns = ("1", "2", "3", "4")
treeview = ttk.Treeview(treeview_frame, yscrollcommand=scrollbar.set, columns=columns, show="headings", height=20)
scrollbar.config(command=treeview.yview)
treeview.pack()

treeview.column("1", width=50, anchor=tk.CENTER)
treeview.column("2", width=200)
treeview.column("3", width=200)
treeview.column("4", width=100)
treeview.heading("1", text="id")
treeview.heading("2", text="Ürün Adı", anchor=tk.W)
treeview.heading("3", text="Marka Adı", anchor=tk.W)
treeview.heading("4", text="Ürün Kodu", anchor=tk.W)

# veri girişinin olduğu kısımlar
entry_frame = ttk.Frame(root)
entry_frame.grid(row=0, column=1, sticky="n", padx=10)
urun = tk.StringVar()
urun_adi = ttk.Label(entry_frame, text="Ürün Adı")
urun_adi.grid(row=0, column=0)
urun_adi_ent = tk.Entry(entry_frame, textvariable=urun)
urun_adi_ent.grid(row=0, column=1)

marka = tk.StringVar()
marka_adi = ttk.Label(entry_frame, text="Marka Adı")
marka_adi.grid(row=1, column=0)
marka_adi_ent = tk.Entry(entry_frame, textvariable=marka)
marka_adi_ent.grid(row=1, column=1)

kod = tk.StringVar()
urun_kodu = ttk.Label(entry_frame, text="Ürün Kodu")
urun_kodu.grid(row=2, column=0)
urun_kodu_ent = tk.Entry(entry_frame, textvariable=kod)
urun_kodu_ent.grid(row=2, column=1)

for entry in entry_frame.winfo_children():
    if isinstance(entry, tk.Entry):
        entry.configure(bd=0, highlightthickness=0, font=("Arial", 12))

kaydet = tk.Button(entry_frame, text="KAYDET", command=db_kaydet)
kaydet.grid(row=3, column=0, pady=20)

tablo_olustur()
listele()

root.mainloop()

sadece kayıt yapan ve listeleyen bir uygulama örneği.
değişken isimlerini biraz okunaklı ve anlamlı yazın. entry9 nedir isminden entry ile ilgili olduğunu anlayabiliriz ama hangi entryi gösterdiğini bilemiyoruz. aynı şekilde label isimlendirmelerizde neyi ifade ediyorsa o isimle adlandırınız. Desktop GUI App With Python & Tkinter - YouTube izleyin, anlayın, yapmaya çalışın. güncelleme, silme, arama gibi işlemler videoda mevcut. orada listbox üzerinden anlatımı mevcut anlarsanız treeview üzerinde işlem yapmanız kolay olur. kulağını çınlatmadan da geçmeyelim kodlarınızın yazım biçimi Skyfall hatırlattı.

1 Beğeni