Günlerdir Tkinterde Ekrana Bakıp Duruyorum. Yardımınıza İhtiyacım var

tkinter’i öğrenmeye yeni geçtim. iyi kötü etiket ve buton oluşturma, yazı rengi, arka plan vb. temel bilgileri öğrendim. Lakin, sizin için belki çok basittir ama günlerdir kaynak videolarını araştırıyorum. hiç birinde istediğim gibi bir kaynak bulamadım. kafamda nasıl bir yol istersem yaparim gibi düşüncelere dalip, ekran basinda donup kalmaktan dolayı bütün hevesim kırılıyor.

kücük bir stok programı yapmak istiyorum. ürün ekleme, listeleme, silme, pc’ye dosya olarak kaydetme vs. Mevcut stokta diyelim;
salata :100 kg
domates: 75 kg var. satılan her kalemdeki üründe kilosu eksildikce, stoktan düşmesini istiyorum. Bu sekilde olan bir kaynaga rastlamadım. farklı farklı kodları kaynaklardan alarak yapayım diyorum, onuda beceremedim. yardımınıza ihtiyacım var. tam manasıyla uygulamalı eğiğim veren bir kanal tavsiye edermisiniz. ingilizce bilmiyorum ama alt yazılıda izleyebilirim.

Bu olay Tk ile alakalı değil. Python ile
bu işlemi yapabiliyorsanız; konsoldaki
çıktılar, Tk üzerine aktarılır.
Print işlemi ile yapan kodu yazın
yeter şimdilik.

1 Beğeni

Evet, tkinter ile arayüz, etkileşim ekranı oluşturmak konusunda gelişme katemişsiniz…

Kafanızdan nasıl bir video geçiyor da bulamıyorsunuz? Kafanızdan geçen videoyu henüz çekmemiş olabilirler.

Bunun yerine, self learning/ kendi kendine öğrenme metodlarını uygulayın. Bunun için de bir kitap edinin, videoda baka baka öğrenme diye bir şey olmaz. Dijital yada basılı bir kitap edinin, tek kitap kullanarak, baştan sona örnekleri deneyerek kitabı bitirin. Aynı anda birden çok kaynağa girip giriş seviyesinde kalmayın.

Bu kadar basit bir sorunda soğuyacaksanız zaten bırakın bu işi hiç zorlamayın kendinizi. Öyle her şey elinizin altında hazırca basitçe çözümlenebilecek olsa zaten herkes yapardı.

Bazan günlerce, aylarca hatta bazan yıllarca uğraşmanız gerekecek.

Öyle her istediğiniz olmaz. Böyle de kaynak aranmaz. İstemek yetmez, nasıl yapacağınızı öğrenmeniz gerekir.

Zaten bu da tkinter in derdi değil. Bir veritabanı konusu. Veriler kaydeder, sonra verideki değeri eksiltir yada artırırsınız.

Atıyorum satış butonuna yada eksilt butonuna atadığınız kod ile mevcut miktarı getirip ne kadar eksilteceksek eksiltip geri kaydedersiniz.

Sonuç olarak şunu yapmak istiyorum, bunu yapmak istiyorum videosu da olsun yok öyle bir dünya.

İstemek başka bir şey istediğini yapmak için gayret etmek başka bir dünya.

İki satır kodu yazıp deneyip sonuçlarını yorumlayıp , tekrar tekrar denemeden videolarla olmaz o işler.

Öyle olsaydı buyur:

Python ile mini muhasebe programı 1.Bölüm - YouTube

Burada domatesini salatalığını kaydet bakalım.

4 Beğeni

Programlama öğrenmek bir süreçtir, öyle hemen video izledim öğrendim demekle olmaz, ekranın karşısında donup kalıyorsanız, algoritma kuramıyorsunuz demektir. Bu da programlamanın temelidir. Öncelikle herhangi bir sürecin algoritmasını yazmayı deneyerek başlayabilrisin. Daha sonra Tk kullanarak bunları gerçekleştirebildiğini göreceksin. Yapmak istediğin şeyin birebir aynısını bulamayabilirsin bu çok normal.

3 Beğeni

Merhaba,

Öncelikle ihtiyaç duyduğumuz iki ana modülü ve bir yan modülü tekrar hatırlayalım.

Arayüz için tkinter, veri tabanı için sqlite3, zaman işlemleri için datetime

Arayüz kısmındaki fantezileri sizlere bırakıyorum. Veri tabanı ile ilgili olan kısım ve programın çalışma mantığı ile izleyeceği algoritmasını konuşalım.

Örnek vermek gerekirse şayet yapmak istediğimiz işi bir depo programı olarak düşünelim. Depomuzda ürünler var ve bunların takibini yapabilmek için daha efektif olabileceğimiz bir program oluşturmak istiyoruz.

Nelere ihtiyacımız var?

  • Ürünlerin Girişlerinin Kayıt Edilmesi
  • Ürünlerin Satışlarının Kayıt Edilmesi
  • Ürünlerin Giriş ve Satış Kayıtlarının Raporlanması
  • Ürünlerin Stok Durumunun Raporlanması

İhtiyaç duyduğumuz bu işlemleri efektif bir şekilde kullanabilmek için veri tabanı tasarımlarına ihtiyacımız var. Burada bir karar vermemiz gerekiyor. Tüm ürünleri tek bir veri tabanı tablosunun içerisinde mi tutmak istiyoruz, kategorize mi etmek istiyoruz yoksa her ürün için ayrı ayrı veri tabanı mı oluşturmak istiyoruz?

Geleceğe bir fikir olabilmesi ve daha basit şekilde üretilmesi hususunda “her ürün için ayrı ayrı veri tabanı” oluşturarak ilerleyelim.

Depomuzda bulunan 3 farklı ürün olsun bunlarla ilgili öncelikle veri tabanı tablolarımızı oluşturalım.

cursor.execute("CREATE TABLE IF NOT EXISTS ELMA_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")
cursor.execute("CREATE TABLE IF NOT EXISTS ARMUT_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")
cursor.execute("CREATE TABLE IF NOT EXISTS AYVA_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")

Tablolarımızı hazırladıktan sonra öncelikle bu tablolara tasarladığımız ara yüz aracılığı ile veri girişi yapmamız gerekiyor.

Kullanıcıdan miktar ve birim türü bilgisi alarak datetime modülünün datetime.now() fonksiyonu ile anlık kayıt tarihi verilerini gerekli koşulları sağladığı ve hangi üründen kayıt oluşturmak istediğinin kontrolünü yaparak tablolara eklenir.

Örn;

#stoklara ürün girişi yapılıyor
urun_secimi = input("Lütfen ürün adını giriniz >> ")
miktar = float(input("Lütfen ürün miktarını giriniz >> ")
birim_turu = input("Lütfen ürün birim türünü giriniz >> ")

if urun_secimi == "ELMA":
    cursor.execute("INSERT INTO ELMA_STOK VALUES (?,?,?),(miktar, birim_turu, datetime.now())")

else:
    break

Bu şekilde stoklarımıza ürün girişi yapmış olduk. En ilkel seviyede devam ediyorum. Yoksa buraya kadar yazılacak çok fazla kod var. Koşul kontrol sorgulamarı için lakin öncelikle basit olanı kavradıktan sonra üstüne koymak lazım.

Şimdide stoklarımızdan ürün azaltalım.

Örn;

#stoklardan ürün çıkışı yapılıyor
urun_secimi = input("Lütfen ürün adını giriniz >> ")
miktar = float(input("Lütfen ürün miktarını giriniz >> ")
miktar = miktar * -1 #çıkış yapan miktarı - ile çarptığımız için tabloda veriyi hesaplarken 100kg üründen 30kg satıldığını işlem üstünde bize gösterecek. -1 ile çarpmamış olsaydık sürekli tabloya + veri yani stok kaydı olurdu.
birim_turu = input("Lütfen ürün birim türünü giriniz >> ")

if urun_secimi == "ELMA":
    cursor.execute("INSERT INTO ELMA_STOK VALUES (?,?,?),(miktar, birim_turu, datetime.now())")

else:
    break

Şu anda tablomuza 2 tür veri girdiğimizi düşünelim. Birincisi 100kg elma girdik ve sonra bu 100kg elmadan 30kg sattık. Her iki kayıtta tablomuzda bulunuyor.

Şimdi bununla ilgili bir rapor görüntüleyelim. Öncelikle kayıtlı verileri veri tabanından çekerek üzerinde gerekli işlemleri yapıp kullanıcıyı bilgilendirelim.

arama = input("Stok kontrolü yapılacak ürün ismini giriniz >> ")

if arama == "ELMA":
    cursor.execute("SELECT SUM(MIKTAR) FROM ELMA_STOK")
    veriler = cursor.fetchall()
    stok_adeti = veriler[0][0]
    print("ELMA ÜRÜNÜ STOK ADETİ >> {}".format(stok_adeti))

Böylelikle kullanıcı elma ürününe ait stok adetini direkt öğrenmiş oldu. Eğer kullanıcı elma ürünü ile ilgili tüm kayıtlara erişmek isteseydi o zaman da tablodaki tüm verileri (“SELECT * FROM ELMA_STOK”) ile alıp ekrana yazdırabilirdik.

En basitinden aklında bir şeyler canlanması için bunları iyice oku, uygulamaya çalış ve içinde boğul. Tavsiyem öncelikle konsol üzerinde bu programı tasarlamandan yana. Hatta bununla ilgili bir proje videom var izleyebilirsin.

Bu tarz programlara gerçekten meraklıysan benimle rahatlıkla özel mesajdan iletişime geçebilirsin. Stok takip, muhasebe kaydı, satış takibi, sipariş takibi gibi hepsinin birbirine benzeyen projelerim var. Seve seve yardımcı olurum.

İyi forumlar.

1 Beğeni

Ilginiz için teşekkür ederim, youtube kanalınıza abone oldum. bu tarz programlardan ziyade, kafamda bir şeyler belirleyip, onu yapmak istiyorum. kendimi geliştirmeye çalisiyorum. ingilizcede bilmediğim için bir hayli zorlanıyorum. buna takılı kaldım, aşmaya çalışıyorum. projelerinize bakarak kodları anlamaya, nasıl bir yol izlemem konusunda bana yardımcı olur.

ayrıca;

from tkinter import*
from tkinter import messagebox
pencere = Tk()
pencere.geometry("500x400")
pencere.resizable(FALSE,FALSE)
pencere.title("Test")

def ekle():
    urun = giris.get()
    liste.insert =(END, urun)
    giris.delete(0, END)

liste = Listbox(pencere, width = 20, height = 10, bg = "aqua", bd =4)
liste.pack(pady = 10)

giris = Entry()
giris.pack( pady = 10)

dugme = Button(pencere, text = "ekle", command = ekle)
dugme.pack( pady = 10)

dugme2 = Button(pencere, text = " Çıkış", command = pencere.destroy)
dugme2.pack(pady = 10)


pencere.mainloop()

listbox’a bir şeyler ekleme yapmak istiyorum, ekleme yapmiyor. nerede yanlis yapiyorum acaba.

çok basit bir söz dizimi hatası mevcut onu düzeltince oluyor. Gözden kaçması çok normal.

eskisi

from tkinter import*
from tkinter import messagebox
pencere = Tk()
pencere.geometry("500x400")
pencere.resizable(FALSE,FALSE)
pencere.title("Test")

def ekle():
    urun = giris.get()
    liste.insert =(END, urun)
    giris.delete(0, END)

liste = Listbox(pencere, width = 20, height = 10, bg = "aqua", bd =4)
liste.pack(pady = 10)

giris = Entry()
giris.pack( pady = 10)

dugme = Button(pencere, text = "ekle", command = ekle)
dugme.pack( pady = 10)

dugme2 = Button(pencere, text = " Çıkış", command = pencere.destroy)
dugme2.pack(pady = 10)


pencere.mainloop()

yenisi

from tkinter import*
from tkinter import messagebox
pencere = Tk()
pencere.geometry("500x400")
pencere.resizable(FALSE,FALSE)
pencere.title("Test")

liste = Listbox(pencere, width = 20, height = 10, bg = "aqua", bd =4)
liste.pack(pady = 10)

giris = Entry()
giris.pack( pady = 10)

def ekle():
    urun = giris.get()
    liste.insert(END, urun)
    giris.delete(0, END)
    
dugme = Button(pencere, text = "ekle", command = ekle)
dugme.pack( pady = 10)

dugme2 = Button(pencere, text = " Çıkış", command = pencere.destroy)
dugme2.pack(pady = 10)


pencere.mainloop()

fonksiyonun yerini değiştirdim ve liste.insert =(END, urun) satırını liste.insert(END, urun) şeklinde düzeltince oldu.

Cok tesekkur ederim, o kadarda ustunden gectim, gorememisim

Normal şeyler bunlar, bazen saatler veya günler süren kod incelemesi sonucunda hatanın bir boşluk ; ! _ vb ufacık bir detaydan ötürü hata verdiğine şahit olabiliyoruz. Bir noktadan sonra eğlenceli geliyor.