Python Tkinter sqlite yardım arkadaşlar

Arkadaşlar 2. sayfadaki bilgileri doldurduktan sonra göndere bastığım zaman bilgilerin sqlite düşmesini istiyorum ama anlayamadım mantığı yardım edermisiniz?

import tkinter as tk
from tkinter import messagebox
import sqlite3


pencere = tk.Tk()
pencere.state("zoomed")
pencere.configure(background="purple")
etiket1 = tk.Label(text='Kullanıcı Adı?', background="purple", foreground="white")
etiket1.place(x=610, y=350)

etiket2 = tk.Label(text='Şifre?' , background="purple", foreground="white")
etiket2.place(x=630, y=400)

tb_aden1 = tk.Entry()
tb_aden1.place(x=700, y= 350)

tb_aden2 = tk.Entry()
tb_aden2.place(x=700, y= 400)
def giris():
    if tb_aden1.get() == "":
       messagebox.showerror("Hata Kullanıcı Adı", "Kullanıcı Adı Boş Bırakılamaz.")
    else:
        if tb_aden2.get() =="":
            messagebox.showerror("Hata Şifre","Şifre boş bırakılamaz")
        else:
            if (tb_aden1.get() == str("1") and tb_aden2.get() == str("1")):
                messagebox.showinfo("Başlık", "Giriş Başarılı",)
                pencere.destroy()
                yenipencere()
            else:
                messagebox.showerror("Hata Başlık", "Hatalı Giriş")

btngiris = tk.Button(text='Giriş Yap', command=giris , background="blue", foreground="black")
btngiris.place(x=850,y=369)

btnkayıt = tk.Button(text="Kayıt Ol", background="blue", foreground="black")
btnkayıt.place(x=737,y=435)
def yenipencere():
    import tkinter as tk
    import sqlite3
    pencere = tk.Tk()
    pencere.state("zoomed")
    pencere.configure(background="grey")
    baglanti = sqlite3.connect("girisbilgileri.db")
    islem = baglanti.cursor()
    baglanti.commit()
    etiket3 = tk.Label(text="İsminiz")
    etiket3.place(x=610 , y=200)
    etiket4 = tk.Label(text="Soy İsminiz")
    etiket4.place(x=610, y=250)
    etiket5 = tk.Label(text="Ad Soyad")
    etiket5.place(x=610, y=300)
    etiket6 = tk.Label(text="Gmail Adresiniz")
    etiket6.place(x=600, y=350)
    etiket7 = tk.Label(text="Tc Kimlik Numaranız")
    etiket7.place(x=578, y=400)
    etiket8 = tk.Label(text="Adresiniz")
    etiket8.place(x=610, y=450)

    isim = tk.Entry()
    isim.place(x=700, y=200)
    soyisim = tk.Entry()
    soyisim.place(x=700, y=250)
    adsoyad = tk.Entry()
    adsoyad.place(x=700, y=300)
    gmail = tk.Entry()
    gmail.place(x=700, y=350)
    tc = tk.Entry()
    tc.place(x=700, y=400)
    adres = tk.Entry()
    adres.place(x=700, y=450)
    Lb1 = tk.Listbox()
    Lb1.place(x=1000, y=600)



    listbox = tk.Listbox()




    def gönder():
        if isim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if soyisim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adsoyad.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if gmail.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if tc.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adres.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        strings= [isim.get(), soyisim.get(), adsoyad.get(), gmail.get(), tc.get(), adres.get()]
        Lb1.insert("end",strings)
        btnsil = tk.Button(text='Sil.', command=lambda: Lb1.delete(0, tk.END), background="grey", foreground="black")
        btnsil.place(x=730, y=530)
        entry_temizle()
        tb_aden3.focus()

    def entry_temizle():
        isim.delete(0, tk.END)
        soyisim.delete(0, tk.END)
        adsoyad.delete(0, tk.END)
        gmail.delete(0, tk.END)
        tc.delete(0, tk.END)
        adres.delete(0, tk.END)


    btngönder = tk.Button(text='Gönder.', command=gönder, background="grey", foreground="black")
    btngönder.place(x=730, y=500)


    islem.execute("insert into kullanicibilgileri (isim, soyisim,adsoyad,gmail,tc,adres,) values (?,?,?,?,?,?)",(isim, soyisim, adsoyad, gmail, tc, adres))
    baglanti.commit()
    baglanti.close()

pencere.mainloop()

bir kaç gündür sorunlarınızı yazıyorsunuz ama çözümlerden yararlanmıyorsunuz. biraz videolardan faydalanıp tkinteri anlamaya çalışın. Python GUI's With TKinter - YouTube ingilizce ama bakınca ne yapmak istediği az çok biliniyor.
python istihza belgelerini okuyun. sonlara doğru sqlite3 açıklaması da mevcut.

1 Beğeni

hocam sizmi atmıştınız emin değilim ama 3 tane içerik atıldı ve bunları izledim onlara göre bir şeyler yapmaya çalışıyorum ve aldığım hatalarıda buraya soruyorum yardım ederseniz çok sevinirim

import tkinter as tk
from tkinter import ttk
import sqlite3

pencere = tk.Tk()
pencere.title("Rehber Uygulaması")

def db_tablo():
    with sqlite3.connect("telefonrehberi.db") as db:
        db.execute("""create table if not exists rehber(id INTEGER PRIMARY KEY ,isim TEXT, soyisim TEXT, tckn TEXT, 
        anne_adi TEXT, baba_adi TEXT, dogum_yeri TEXY, dogum_tarihi TEXT, telefon TEXT, meslek TEXT)""")

def db_veriler():
    with sqlite3.connect("telefonrehberi.db") as db:
        return db.execute("select * from rehber").fetchall()

def kaydet():
    with sqlite3.connect("telefonrehberi.db") as db:
        db.execute("insert into rehber VALUES (NULL,?,?,?,?,?,?,?,?,?)", (ad.get(), soyad.get(), tckn.get(), anne.get(),
                                                                   baba.get(), dyeri.get(), dtarihi.get(),
                                                                   telefon.get(), meslek.get()))
        db.commit()
    entry_clear()
    listele()
    ent_ad.focus()

def entry_clear():
    for i in rehber_frm.winfo_children():
        if isinstance(i, tk.Entry):
            i.delete(0, tk.END)

def listele():
    rehber_tree.delete(*rehber_tree.get_children())
    for i in db_veriler():
        rehber_tree.insert("", index=tk.END, values=(i[0], i[1], i[2], i[8], i[4], i[5], i[6], i[7],i[3], i[9]))


#treeview için frame
trv_frm = tk.Frame(pencere)
trv_frm.grid(row=0, column=0)

#scrollbar
scrollbar = ttk.Scrollbar(trv_frm, orient="vertical")
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
sutunlar = ("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
#treeview
rehber_tree = ttk.Treeview(trv_frm, yscrollcommand=scrollbar.set, columns=sutunlar, show="headings", height=20)
rehber_tree.pack()
scrollbar.config(command=rehber_tree.yview)
#sütun genişliklerinin tanımlanması
rehber_tree.column("1", width=50, anchor=tk.CENTER)
rehber_tree.column("2", width=100)
rehber_tree.column("3", width=100)
rehber_tree.column("4", width=100)
rehber_tree.column("5", width=100)
rehber_tree.column("6", width=100)
rehber_tree.column("7", width=125)
rehber_tree.column("8", width=75, anchor=tk.CENTER)
rehber_tree.column("9", width=95)
rehber_tree.column("10", width=100)
#sütun başlıklarının tanımlanması
rehber_tree.heading("1", text="id", anchor=tk.CENTER)
rehber_tree.heading("2", text="İsim", anchor=tk.W)
rehber_tree.heading("3", text="Soyisim", anchor=tk.W)
rehber_tree.heading("4", text="Telefon", anchor=tk.W)
rehber_tree.heading("5", text="Anne Adı", anchor=tk.W)
rehber_tree.heading("6", text="Baba Adı", anchor=tk.W)
rehber_tree.heading("7", text="D.Yeri", anchor=tk.W)
rehber_tree.heading("8", text="D.Tarihi")
rehber_tree.heading("9", text="TCKN")
rehber_tree.heading("10", text="Meslek", anchor=tk.W)

#rehber kayıt formu için frame
rehber_frm = tk.Frame(pencere)
rehber_frm.grid(row=0, column=1, sticky="nsew")
ad = tk.StringVar()
lbl_ad = ttk.Label(rehber_frm, text="ADI")
lbl_ad.grid(row=0, column=0, sticky='W', pady=6, padx=5)
ent_ad = tk.Entry(rehber_frm, textvariable=ad)
ent_ad.grid(row=0, column=1)
ent_ad.focus()

soyad = tk.StringVar()
lbl_soyad = ttk.Label(rehber_frm, text="SOYADI")
lbl_soyad.grid(row=1, column=0, sticky='W', padx=5)
ent_soyad = tk.Entry(rehber_frm, textvariable=soyad)
ent_soyad.grid(row=1, column=1)

tckn = tk.StringVar()
lbl_tckn = ttk.Label(rehber_frm, text="TC KİMLİK NO")
lbl_tckn.grid(row=2, column=0, sticky="W", pady=6, padx=5)
ent_tckn = tk.Entry(rehber_frm, textvariable=tckn)
ent_tckn.grid(row=2, column=1)

anne = tk.StringVar()
lbl_anneadi = ttk.Label(rehber_frm, text="ANNE ADI")
lbl_anneadi.grid(row=3, column=0, sticky='W', padx=5)
ent_anneadi = tk.Entry(rehber_frm, textvariable=anne)
ent_anneadi.grid(row=3, column=1)

baba = tk.StringVar()
lbl_babaadi = ttk.Label(rehber_frm, text="BABA ADI")
lbl_babaadi.grid(row=4, column=0, sticky='W', pady=6, padx=5)
ent_babaadi = tk.Entry(rehber_frm, textvariable=baba)
ent_babaadi.grid(row=4, column=1)

dyeri = tk.StringVar()
lbl_dogumyeri = ttk.Label(rehber_frm, text="DOĞUM YERİ")
lbl_dogumyeri.grid(row=5, column=0, sticky='W', padx=5)
ent_dogumyeri = tk.Entry(rehber_frm, textvariable=dyeri)
ent_dogumyeri.grid(row=5, column=1)

dtarihi = tk.StringVar()
lbl_dogumtarihi = ttk.Label(rehber_frm, text="DOĞUM TARİHİ")
lbl_dogumtarihi.grid(row=6, column=0, sticky='W', pady=8, padx=5)
ent_dogumtarihi = tk.Entry(rehber_frm, textvariable=dtarihi)
ent_dogumtarihi.grid(row=6, column=1)

telefon = tk.StringVar()
lbl_telefon = ttk.Label(rehber_frm, text="TELEFON NO")
lbl_telefon.grid(row=7, column=0, sticky='W', padx=5)
ent_telefon = tk.Entry(rehber_frm, textvariable=telefon)
ent_telefon.grid(row=7, column=1)

meslek = tk.StringVar()
lbl_meslek = ttk.Label(rehber_frm, text="MESLEK")
lbl_meslek.grid(row=8, column=0, sticky='W', padx=5)
ent_meslek = tk.Entry(rehber_frm, textvariable=meslek)
ent_meslek.grid(row=8, column=1, pady=5, padx=5)

btn_kaydet = ttk.Button(rehber_frm, text="KAYDET", command=kaydet)
btn_kaydet.grid(row=9, column=0, pady=20)


db_tablo()
listele()

pencere.mainloop()

basit işini görebilecek bir rehber uygulaması, sadece kaydet işlevini tanımladım, kayıt silme, güncelleme gibi işlemleri artık kendin yapmaya çalışacaksın. kaydet fonksiyonunda hiçbir kontrol işlemi yapmadım, tüm satırlar boş olsa bile kayıt yapıyor orayı da elden geçirmelisin.

hocam o sorunu bir şekilde çözdüm ben
hatta biraz daha ilerlettim, senin dediğin gibi araştırınca öğreniliyormuş biraz kolaya kaçmışım
ama yeni bir sorun var ve saat 11 den beri araştırıyorum hala bir sonucu bulamadım hep text üzerinden yapıyor yapanlar yada komutla bu konuda bir yardım edersen sevinirim

Konu : Hocam veri tabanından tkinter listboxına veri tabanını aktarıyorum sonrasında üstüne bir entry box koydum ve bir buton benim isteğim oraya İD yi yazınca (1,2,3,4,5,6,7,8,) sil butonuna basınca silinmesi ama bu konuda bir sonuç alamadım. Bu konuda gerçekten yardıma ihtiyacım var

import tkinter as tk
from tkinter import messagebox
import sqlite3


pencere = tk.Tk()
pencere.state("zoomed")
pencere.configure(background="purple")
etiket1 = tk.Label(text='Kullanıcı Adı?', background="purple", foreground="white")
etiket1.place(x=610, y=350)

etiket2 = tk.Label(text='Şifre?' , background="purple", foreground="white")
etiket2.place(x=630, y=400)

tb_aden1 = tk.Entry()
tb_aden1.place(x=700, y= 350)

tb_aden2 = tk.Entry()
tb_aden2.place(x=700, y= 400)
def giris():
    if tb_aden1.get() == "":
       messagebox.showerror("Hata Kullanıcı Adı", "Kullanıcı Adı Boş Bırakılamaz.")
    else:
        if tb_aden2.get() =="":
            messagebox.showerror("Hata Şifre","Şifre boş bırakılamaz")
        else:
            if (tb_aden1.get() == str("1") and tb_aden2.get() == str("1")):
                messagebox.showinfo("Başlık", "Giriş Başarılı",)
                pencere.destroy()
                yenipencere()
            else:
                messagebox.showerror("Hata Başlık", "Hatalı Giriş")

btngiris = tk.Button(text='Giriş Yap', command=giris , background="blue", foreground="black")
btngiris.place(x=850,y=369)

btnkayıt = tk.Button(text="Kayıt Ol", background="blue", foreground="black")
btnkayıt.place(x=737,y=435)
def yenipencere():
    import tkinter as tk
    import sqlite3
    pencere = tk.Tk()
    pencere.state("zoomed")
    pencere.configure(background="grey")
    baglanti = sqlite3.connect("girisbilgileri.db")
    islem = baglanti.cursor()
    baglanti.commit()
    table = islem.execute("create table if not exists arabalar (isim text, soyisim text, adsoyad text, gmail text, tc text, adres text)")
    baglanti.commit()
    etiket3 = tk.Label(text="İsminiz")
    etiket3.place(x=610 , y=200)
    etiket4 = tk.Label(text="Soy İsminiz")
    etiket4.place(x=610, y=250)
    etiket5 = tk.Label(text="Ad Soyad")
    etiket5.place(x=610, y=300)
    etiket6 = tk.Label(text="Gmail Adresiniz")
    etiket6.place(x=600, y=350)
    etiket7 = tk.Label(text="Tc Kimlik Numaranız")
    etiket7.place(x=578, y=400)
    etiket8 = tk.Label(text="Adresiniz")
    etiket8.place(x=610, y=450)
    etiket9 = tk.Label(text="Silmek için id giriniz.")
    etiket9.place(x=875, y=575)
    isim = tk.Entry()
    isim.place(x=700, y=200)
    soyisim = tk.Entry()
    soyisim.place(x=700, y=250)
    adsoyad = tk.Entry()
    adsoyad.place(x=700, y=300)
    gmail = tk.Entry()
    gmail.place(x=700, y=350)
    tc = tk.Entry()
    tc.place(x=700, y=400)
    adres = tk.Entry()
    adres.place(x=700, y=450)
    Lb1 = tk.Listbox()
    Lb1.place(x=1000, y=600)
    silme = tk.Entry()
    silme.place(x=1000, y=575)


    listbox = tk.Listbox()



    def gönder():
        if isim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if soyisim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adsoyad.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if gmail.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if tc.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adres.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        baglanti = sqlite3.connect("girisbilgileri.db")
        islem = baglanti.cursor()
        table= islem.execute("insert into kullanicibilgileri (isim, soyisim,adsoyad,gmail,tc,adres) values (?,?,?,?,?,?)", (isim.get(), soyisim.get(), adsoyad.get(), gmail.get(), tc.get(), adres.get()))
        baglanti.commit()
        baglanti.close()


        liste()
        entry_temizle()

    def liste():


        islem.execute("SELECT * FROM kullanicibilgileri")
        data = islem.fetchall()
        for i in data:
            Lb1.insert("end",i);
    def entry_temizle():
        isim.delete(0, tk.END)
        soyisim.delete(0, tk.END)
        adsoyad.delete(0, tk.END)
        gmail.delete(0, tk.END)
        tc.delete(0, tk.END)
        adres.delete(0, tk.END)

   



    btngönder = tk.Button(text='Gönder.', command=gönder, background="grey", foreground="black")
    btngönder.place(x=730, y=500)

    btnverigönder = tk.Button(text="Veri Gönder", command=islem, background="grey", foreground="black" )
    btnverigönder.place(x=1000, y=765)

    btnverisil = tk.Button(text="   Sil   ",background="grey", foreground="black")
    btnverisil.place(x=1150, y=575)
pencere.mainloop()
baglanti = sqlite3.connect("girisbilgileri.db")

bu kullandığın database ismi

şurda bir tablo oluşturmuşsun arabalar isminde

table = islem.execute("create table if not exists arabalar (isim text, soyisim text, adsoyad text, gmail text, tc text, adres text)")

şurada ise kullanıcıbilgileri tablosuna veri kaydetme işlemi.

table= islem.execute("insert into kullanicibilgileri (isim, soyisim,adsoyad,gmail,tc,adres) values (?,?,?,?,?,?)", (isim.get(), soyisim.get(), adsoyad.get(), gmail.get(), tc.get(), adres.get()))

database kısmın sorunlu. kullanıcıbilgileri tablosunun createsini göremedim. Neyse asıl sorunumuz listeden birini silmek ise, fare ile listeden birini seçtiğimizde onu listbox un bind ve select özelliğinden faydalanarak farenin tuttuğu satırın verilerini almak ve databaseden silmek. ben listbox ile çalışmıyorum ama videosundan bakıp kodu yazmak kolay olur ama sana bir faydası dokunmaz. verdiğim link ile uğraşsan oradaki işlemler hep senin sorduklarınla ilgili olacaktı. databaseye veri kaydetmek, güncellemek, silmek, listelemek.sen bu rehber işini ve giriş penceresini az ertele. oradaki işlemleri yap, butonlar, database işlemleri ile nasıl bağlantı kurulduğunu kavra. Desktop GUI App With Python & Tkinter - YouTube

hocam hep kod üzerinden sildikleri için sonuçlarda ingilizce kaynaklarıda anlamıyorum takıldım ondan dolayı yazdım

Kodunuzu olduğu gibi PyCharma yapıştırdım ve 96. satırda sorun olduğunu belirtti PyCharm
Önce bu sorunu çözelim.
96.Satırdaki kod bu
tb_aden3.focus()
baktığım zaman tb_aden3 ün üstüne imleci getir diyor ama tb_aden3 diye bir değişkenimiz yok tb_aden3 yerine isim yazarak hatayı çözebiliriz.
Sonra kodunuzu denediğimde btnsil tuşuna bastığımda tüm verilerin silindiğini gördüm bence bu mantıksız o yüzden btnsil i btn_temizle yapacağım.

btnsil = tk.Button(text='Sil.', command=lambda: Lb1.delete(0, tk.END), background="grey", foreground="black")
btnsil.place(x=730, y=530)

Bu 2 satırı bunla değiştiriyorum.

 btn_temizle = tk.Button(text='Temizle', command=lambda: Lb1.delete(0, tk.END), background="grey", foreground="black")
 btn_temizle.place(x=730, y=530)

Bi tanede sil butonu yapalım ama ondan önce btn_temizle hala gönder fonksiyonunun içinde onu dışarı alıyorum btngönder in altına.
Şimdi sil butonunu yapabiliriz.
btn_sil diye bir buton oluşturuyorum

btn_sil = tk.Button(text='Sil', background="grey",foreground="black")

Şimdi bunu ekranımıza yerleştirelim önceki butonlara bakıyorum.
image
Birinde y 500 diğerinde 530 demek ki bu butonumun da y si 560 olacak
btn_sil.place(x=730, y=560)
Şimdi bunun commandını yazalım tek satırda yapabileceğim için lambda kullanıyorum def ile fonksiyon oluşturmayacağım
command=lambda :Lb1.delete(Lb1.curselection())
Lb1 den Lb1 de seçilen nesneyi sil fakat bunu kullanan kişi eğer birini seçmeden tıklarsa uyarı verdirmemiz lazım. Bunu ise Lb1.curselection() un değeri ile yapacağız.

    btn_sil = tk.Button(text='Sil',command=lambda :Lb1.delete(Lb1.curselection() if Lb1.curselection() else messagebox.showerror("Hata","Lütfen silinecek nesneyi seçiniz")), background="grey",foreground="black")

Yani kodumuz böyle oluyor. Kodu çalıştırdığımda gönder tuşuna bastığımda çok fazla hata penceresi çıkıyor gönder tuşuma bastığımda gönder fonksiyonu çalışıyormuş ve oradaki kod ise şöyle

        if isim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if soyisim.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adsoyad.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if gmail.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if tc.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        if adres.get() == "":
           messagebox.showerror("Hata Boş!.", "Boş Bırakmayınız.")
        strings= [isim.get(), soyisim.get(), adsoyad.get(), gmail.get(), tc.get(), adres.get()]
        Lb1.insert("end",strings)
        entry_temizle()
        isim.focus()

Baktığımızda birden çok if kullanıldığını görüyoruz elif kullanılmadığı için bu ifler birbirinden bağımsız yani hepsinin koşulu uyuyorsa hepsinin içi çalışıyor. Bunu 2 farklı yolla çözebiliriz ilki ilk if hariç diğer ifleri elif yapmak ikincisi ise tüm koşulları tek ifte toplamak ben 2.yi tercih ettim. if dışındaki kodlarıda elsenin içine aldım

if isim.get()=="" or soyisim.get()=="" or adsoyad.get()=="" or gmail.get()=="" or tc.get()=="" or adres.get()=="":

(Boş Bırakmayınız yazısı saçma bence onu Boş alan bırakmayınız ile değiştirebilirsiniz).Şimdi data işlemine başlayacaktım ama bazı kütüphanelerin 2 kere import edildiğini gördüm yeni pencere fonksiyonunun ilk 2 satırı onları siliyorum.


İmportların altına sqlite3 kemik yapısını kuruyorum.

data = sqlite3.connect("veriler.db")
imlec=data.cursor()
imlec.execute("CREATE TABLE IF NOT EXISTS tablo(isim TEXT, soy_isim TEXT, ad_soyad TEXT, gmail TEXT,tc TEXT,adres TEXT)")

Şimdi data ile ilgili işlemleri yapabiliriz.
Öncelikle verial fonksiyonu yazıyoruz.
verial diye bir fonksiyon oluşturdum içine aşağıdaki kodu yazdım.

    def verial():
        Lb1.delete(0,tk.END)
        imlec.execute("SELECT * from tablo")
        for i in imlec:
            Lb1.insert("end"," ".join(i))

Listedeki verileri sil tüm verileri seç sonra bu verlerin içindeki her satırı i ye ata bu iyi de Lb1e ekle.
Şimdi diğer işlemleri dataya uyarlayalım.
gönder fonksiyonundan başlıyorum if in içiyle işimiz yok elsenin içine bakıyorum

strings= [isim.get(), soyisim.get(), adsoyad.get(), gmail.get(), tc.get(), adres.get()]
            Lb1.insert("end",strings)
            entry_temizle()
            isim.focus()

İlk 2 satırı siliyorum onun yerine datama eklersem ve veri alma fonksiyonunu çalıştırırsam dataya ekleyecek ve sonra listeyi güncelleyeceği için istediğimiz olacaktır.

imlec.execute("INSERT INTO tablo values(?,?,?,?,?,?)",(isim.get(),soyisim.get(),adsoyad.get(),gmail.get(),tc.get(),adres.get()))
data.commit()
verial()

Şimdi silme ve temizleme işlemini de değiştireceğiz ama artık karmaşıklaştığı için lamda yerine fonksiyon kullanıyorum.Butonların commandını değiştirelim

    btn_temizle = tk.Button(text='Temizle', command=temizle, background="grey",foreground="black")
    btn_sil = tk.Button(text='Sil',command=sil, background="grey",foreground="black")

Şimdi sil ve temizle fonksiyonlarını yazalım.

    def temizle():
        imlec.execute("DELETE FROM tablo"),
        data.commit()
        verial()

Tüm verileri sil ve verial fonksiyonunu çalıştır.

    def sil():
        if Lb1.curselection():
            imlec.execute("DELETE FROM tablo WHERE rowid=?",(Lb1.curselection()[0]+1,))
            data.commit()
            verial()
        else:
            messagebox.showerror("Hata","Lütfen silinecek öğeyi seçiniz")

Eğer Lb1 de bir şey seçildiyse satır id si Lb1 de seçilen şeyin indexinin 1 fazlası olan ögeyi sil burda neden 1 ekledik Listboxun indexi 0 ile başlar ama satır idsi 1 ile başlar peki neden Lb1.curselection()[0]+1 yazmadık da tuple şeklinde gönderdik derseniz execute 2.parametre olarak tuple alıyor ama neden sonda virgül var derseniz eğer o virgülü koymazsa python bunu tuple değil integer alıyor.

1 Beğeni

Sana güzel ve okunabilir kod yazmakla ilgili bi tavsiye vereyim.

  1. class kullanmayı öğren.
  2. si de böle alt alta kod yazılmaz. atıyorum 100 tane label, button vs oluşturman gerekebilir. Amele gibi alt alta yazılmaz. 1 tane for ile yapabilirsin.
for i in range(10):    
    label = Label(root, text=str(i))    
    label.pack()     

Bu yöntemi kullandığımızda pozisyonu nasıl ayarlayacağız

hangi pozisyon ? tkinter kullanırken place kullanmam genelde grid kullanırım. place için düşünmedim açıkcası. yazmayı deneyeyim.

Detaylı düşünmek lazım. bu iş görür

y = 1
x = 100
for i in range(10):
    label = Label(root, text=str(i))
    label.place(x=x, y=y)                
    y += 50

Ben tkinter kullanmıyorum pyqt kullanıyom orda bende layout kullanıyorum ama burda adam place kullanmış onun için sordum

Bu düzenli artışlar için ama adamın kodundaki yerler düzensiz

yav o ne yazdığını mı biliyo :smiley: öle kod mu olur :smiley: yaptığın projeye göre değişir. önceden plan yaparsın, ona göre kodu yazarsın. mesela hesap makinası yapacaksındır. atıyorum 20 button mu var. for ile tek satırda yapabilirsin. dışardan biri baktığında da bu adam işi biliyoder. kodun kalite seviyesi. bu yöntem ile hiç sorun yaşamadım.

sanada tavsiyem flutter öğrenebilirsin. flutter da yazdığın kodu build ederken. windows, linux, macos, ios, android için aynı kodu derleyebiliyosun. yani 1 kere kod yazıyosun her yerde çalışıyo ve web site içinde build edebiliyosun. en güzel yanıda sürekli güncelleme alıyo.

Hocam çok teşekkürler şimdi yeni bir projeye geçiş yaptım. Kayıt sistemi ve bir çok şeyi yükelyeceğim sadece şurda takılı kaldım. şuanlık internete yazbele ve daha bir çok şeye de baktım. adam gibi sorunu çözen bir şey yok btn kayıt ola bastığım zaman yeni bir tkinter sayfası açılmasını istiyorum
if name == ‘main’:
ana_pencere = Tk()
buton1 = Button(ana_pencere, text=“Pencere Aç”,command=pencere_ac)
buton1.pack()
mainloop()
bunun gibi şeyler buldum ama olmadı bu konuda ne yapmam gerekir ?

import tkinter as tk
from tkinter import messagebox
import sqlite3
pencere = tk.Tk()
pencere.title("Giriş Ekranı")
pencere.state("zoomed")
pencere.configure(background="white")
baglanti = sqlite3.connect("kayıtekranı.db.")
verinere = baglanti.cursor()
baglanti.commit()



etiket1 = tk.Label(text='Kullanıcı Adınız?', background="white", foreground="black")
etiket1.place(x=610, y=350)
etiket2 = tk.Label(text='Şifre?' , background="white", foreground="black")
etiket2.place(x=630, y=400)
tb_aden = tk.Entry()
tb_aden.place(x=715, y=365)
tb_aden1 = tk.Entry()
tb_aden1.place(x=715, y=415)


btngiris = tk.Button(text='Giriş Yap' , background="black", foreground="white")
btngiris.place(x=850,y=369)

btnkayıt = tk.Button(text="Kayıt Ol", background="black", foreground="white")
btnkayıt.place(x=737,y=435)

btnlistbox = tk.Button(text="Listboxa aktar")
btnlistbox.place(x=1400, y=735)
list1=tk.Listbox()
list1.place(x=1375,y=550)

pencere.mainloop()

mesela 10 tane button üretiyoruz ama 5. buttonun kordinatı başka bir yerde olsun istedik diyelim. aklıma böyle bir fikir geldi.

y = 1  
x = 1
for i in range(10):  
    if i == 5:  
    |   x = 50
    |   y = 50

    if i == 6:
    |   x = 350
    |   y = 350

    label = Label(root, text=str(i))
    label.place(x=x, y=y)
    
    y += 50     

sayfa dan kasıt nedir ?

Pencere demek istemiş