Treeview'in bir sütunundaki sayıları nasıl toplayabilirim?

Arkadaşlar merhaba python tkinter ile yazmış olduğum bir satış programı var. Kullanıcıdan Ürün adını ve fiyatını entry ile alarak sqlite veritabanına yazdırıyorum ardından treeview e insert ediyorum. Bu programa toplama butonu ekleyip gün sonunda kazanılan paranın toplamını almak istiyorum nasıl yapabilirim?

konuya farklı bir yönden giriyorum. ürün adı ve fiyatı bence yaptığın program için yeterli değil. tarih kısmı da oluşturup verileri öyle kayıt etmek lazım. veri tabanına ürünü ve fiyatı kaydettin diyelim, her gün için yeni bir veri tabanı mı oluşturacaksın. db den veri çekerken tarihe göre filtreleme yapmak, tarihe uyan verilerin fiyatını toplamak senin için daha uygun olur.

temel mantığı oturttuktan sonra ek ayarlara girmeyi düşünüyorum tarih, ekstra entry vs. Şuan önümdeki tek engel toplamlarını alamamam

Merhaba, şöyle bir örnek paylaşayım belki işinize yarar

import tkinter as tk
from tkinter import ttk

# pencere
root = tk.Tk()

# tree için örnek tablo
sutunlar = ("ürün", "fiyat")
veriler = [(f"ürün_{n}", n * 3) for n in range(1, 6)]

# tree'nin kendisi & verilerin eklenmesi
tree = ttk.Treeview(root, columns=sutunlar, show="headings")

for veri in veriler:
    tree.insert("", tk.END, values=veri)

tree.pack()

# butona basıldığında çalışan fonksiyon
def toplami_yazdir():
    # `tree.get_children` her satırın "id"sini döndürür ("I001" gibi)
	# Bunu kullanarak satırın kendisine erişiriz: `tree.item(item_id)`
	# O da bir sözlüktür ve satırdaki değerleri "values" anahtarındadır
	# Yani `[("ürün_1", 3), ("ürün_2", 6), ...]` listesini elde ediyoruz
	satir_verileri = [tree.item(item_id)["values"]
	                  for item_id in tree.get_children()]
	
	# satır verileri demetler listesi olduğundan istediğimiz sütunun indeksini
	# bilmek gerekir ki istenen veriye ulaşabilelim. Bunu da ister elle
	# yazarsınız direkt, ya da `.index` ile en başlarda yazdığımız `sutunlar`
	# üzerinden dinamik olarak bulursunuz; değeri 1'dir (0 -> ürün, 1 -> fiyat)
	ilgili_sutunun_indeksi = sutunlar.index("fiyat")
	
	# şimdi yukarıdaki satır verilerinin her birine erişip 1.indeksindeki
	# değeri seçersek, `fiyat` sütunun tüm değerlerine erişiriz
	ilgili_sutunun_verileri = [satir[ilgili_sutunun_indeksi]
					           for satir in satir_verileri]
	
	# sonra toplayıp ekrana yazdırıyoruz
	toplam = sum(ilgili_sutunun_verileri)
	print(F"Toplam fiyat: {toplam}")

# toplama butonu
buton = tk.Button(root, text="Topla", command=toplami_yazdir)
buton.pack()

# dön dur
root.mainloop()

Yorumlar ile açıklamaya çalıştım. Asıl olayı yapan tree.get_children ve tree.item metodları ile ilgili sütunun verisine erişiyoruz. toplami_yazdir fonksiyonunda aralara print koyarak da bakabilirsiniz neyin ne olduğuna (mesela print(satir_verileri)).

2 Beğeni

İlginiz için teşekkür ederim hocam eve geçince deneyeceğim.

1 Beğeni