liste = Listbox()
def SinifYonetimi_SinifEkle():
sinifadiyazma.get()
gg = sinifadiyazma.get()
liste.insert(22, gg)
siniflar.insert({"sinif": gg})
sinifeklebuton = Button(text="Sınıf Ekle", command=SinifYonetimi_SinifEkle)
aa = SinifYonetimi_SinifEkle
def sinifYonetimi_SinifSil():
secilmis = liste.curselection()
liste.delete(secilmis)
siniflar.delete_many({"sinif": secilmis}) # Burası
def sinifYonetimi():
veriyicek = siniflar.find().sort("sinif")
i = 1
for x in veriyicek:
print(x["sinif"])
liste.insert(i, x["sinif"])
i = i + 1
liste.configure(width=50)
sinifeklebuton.grid(column=3, row=5, sticky=E)# Buton
liste.grid(column=2, columnspan=3)
silbuton = Button(text="sil", command=sinifYonetimi_SinifSil)
silbuton.grid(column=2, columnspan=3)
silbuton.configure(width=10, height=1)
Yukarıdaki kodda sınıf ekleme sistemini ve Listbox güncelleme sistemini yaptım fakat seçilmiş itemi silmeyi bir türlü yapamadım. Listeden siliyor ama mongodb’den sildiremedim.
Ben işaretlediğim(# Burası) yazan yerde hata olduğunu düşünüyorum. Hata tam olarak nerede?
Burada secilmis, (0, ) gibi bir tuple nesnesi döndürür. liste’den satır silerken de bu tuple nesnesi kullanılır. Ancak siz sonra siniflar.delete_many({"sinif": secilmis}) kodu ile {"sinif": (0, )} gibi bir nesneyi silmeye kalkıyorsunuz ve bu yüzden hata alıyorsunuz.
listbox’ın seçilen satırındaki değeri almak için liste.get(secilmis) yazmanız lazım. Bu ifadeyi bir değişkenin değeri haline getirirseniz - örneğin silinecek = liste.get(secilmis) - ve sonra da silme işlemi için siniflar.delete_many({"sinif": silinecek}) yazarsanız sorun çözülür diye tahmin ediyorum.
Listbox’tan secilen veri mongodb’den silinemiyorsa bunun sebebi cok buyuk ihtimalle bu ikisinden biri:
Listbox’tan secilen veri yanlis
mongodb’den silinmeye calisan veri yanlis
Bu durumlardan hangisiyle karsi karsiya oldugumuzu anlamak python gibi bir dilde cok kolay; ve tek satirlik/yarim dakikalik bir ugrasla problem uzayini yariya indiriyor.
Bunu yapmayi ogrenmeden karmasik sistemler yazman mumkun degil.