Bolum 9 Konu Başlıkları 1.Grafik Arayüz Tasarımı//Pencere Araçları(Widgets) Label Button Enrty Checkbutton Toplevel Listbox Menu Text Bitmap Herhangi bir pencere üzerinde bulunan düğmeler,etiketler,sağa-sola,yukarı-aşağı kayan çubuklar,kutular,menüler,vb,hepsi birden pencere araçlarını,yani widgetleri oluşturuyor. Label(Pencere Aracı) Ingilizcede ''etiket'' anlamına geliyor.bu araç pencerelerin üzerine etiket misali öğeler yapıştırmamızı sağlıyor.bunda bir örnek yapmıştık. Button(Pencere Aracı) Bu araç yardımıyla pencerelerimize,tıklandıklarında belli bir işlevi yerine getiren düğmeler ekleyebileceğiz.''button'' aracının kullanımı daha önce gördüğümüz ''Label'' aracının kullanımına çok benziyor.burada da parantez içinde bazı parametreler kullandık ''text'' parametresini zaten biliyoruz.kullanıcıya göstermek istediğmiz metni ''text'' parametresi yardımıyla belirliyoruz.aynı parantez içinde gördüğümüz ''command'' parametresini ise düğme üzerine tıklandığında işletilecek komutu gösteryoruz.biz burada ''pencere.quit'' komutunu vererek,düğmeye tıklandığında pencerenin kapatılmasını istedik. button=kullanacağımız pencere aracı(''button'':''düğme'') command=oluşturduğumuz düğmeye tıklanıldığında çalıştırılacak komut x.quit=düğmeye tıklandğında pencerenin kapatılmasını sağlayan komut #!/usr/bin/env python pencere=tk() pencere.geometry("200x250+10+15") pencere.tk_setpalette("yellow") button=button(text="exit",command=pencere.quit) Buttonu hazırladık göndermek için, hazırlanan paketi postalayıp gönderdik.
Örnek: 1. oluştur düğmesine basınca yeni bir dosya oluşturalım 2. Veri ekle düğmesine basınca,kullanıcının var olan dosyaya veri ekledik. 3. dosyayı oku düğmesine basınca,oluşturulan dosyayının içeriğini ekrana yazdırın. 4. sil düğmesine basınca,oluşturulan dosyayı sildik 5. kapat düğmesine basınca grafik arayüzünü kapattık ilk olarak hangi dizin atinda çalışıyoruz bakalım,dosyamızı nereye açmak istiyoruz.python komut satırına >>> import os >>> os.getcwd() '/home/user/desktop' yukardaki dizin Linux üzerinde uygulamamdır,windowsta farklı çıkabilir hangi dizin altında ise onu yazın. Dizin ayracını öğrenmek isterseniz >>> os.sep '/'
#!/usr/bin/env python window.geometry("600x250+10+15") window.title("dosya oluşturma\dosyaya Veri eklema\dosyayi okuma\dosyayi Silme") def olustur(): file=open("/home/user/desktop/dosya.txt","w") file.write("python uygulama\n") button=button(text="olustur",command=olustur,fg="white",activebackground="blue",bg="red",cursor ="heart",font="arial 14 bold") def veri_ekle(): file=open("/home/user/desktop/dosya.txt","a") n=raw_input("dosyaya veri ekleyin:") file.write(n) button=button(text="dosyaya veri ekle",command=veri_ekle,fg="red",activebackground="pink",bg="blue",cursor="heart",font="arial 14 bold") def dosyayi_oku(): file=open("/home/user/desktop/dosya.txt").readlines() label1=label(text="dosyanin içeriği") label1.pack() label2=label(text=file) label2.pack() button=button(text="dosyayi Oku",command=dosyayi_oku,fg="white",activebackground="blue",bg="red",cursor="heart",font="Ari al 14 bold") def dosyayi_sil(): import os file=open("/home/user/desktop/dosya.txt") os.remove("/home/user/desktop/dosya.txt") button=button(text="dosyayi sil",command=dosyayi_sil,fg="red",activebackground="pink",bg="blue",cursor="heart",font="arial 14 bold")
Düğmelerin pencere üstünde böyle alt altla görünmesini istemiyor olabilirsiniz.bunun için kodumuza şu eklemeleri yapmamız gerekiyor. Paketleme aşamasında düğmelerden birine side=left parametresini ekleyerek o düğmeyi sola,öbürünede side=right parametesini sağa yaslıyoruz. #!/usr/bin/env python window.geometry("600x250+10+15") window.title("dosya oluşturma\dosyaya Veri eklema\dosyayi okuma\dosyayi Silme") def olustur(): file=open("/home/user/desktop/dosya.txt","w") file.write("python uygulama\n") button=button(text="olustur",command=olustur,fg="white",activebackground="blue",bg="red",cursor="heart",font="arial 14 bold") def veri_ekle(): file=open("/home/user/desktop/dosya.txt","a") n=raw_input("dosyaya veri ekleyin:") file.write(n) button=button(text="dosyaya veri ekle",command=veri_ekle,fg="red",activebackground="pink",bg="blue",cursor="heart",font="arial 14 bold") def dosyayi_oku(): file=open("/home/user/desktop/dosya.txt").readlines() label1=label(text="dosyanin içeriği") label1.pack() label2=label(text=file) label2.pack() button=button(text="dosyayi Oku",command=dosyayi_oku,fg="white",activebackground="blue",bg="red",cursor="heart",font="Arial 14 bold") button.pack(side=right)
def dosyayi_sil(): import os file=open("/home/user/desktop/dosya.txt") os.remove("/home/user/desktop/dosya.txt") button=button(text="dosyayi sil",command=dosyayi_sil,fg="red",activebackground="pink",bg="blue",cursor="heart",font="arial 14 bold") button.pack(side=left) Entry Pencere Aracı Bu araç yardımıyla kullanıcının metin girebileceği tek satırlık bir alan oluşturacağız.bu pencere aracının kullanımıda diğer araçların kullanımına benzer. #!/usr/bin/env python window.geometry("200x250+10+15") window.title("entry pencere araci") giris=entry(bg="white",width="10") giris.pack() giris adını verdiğimiz Entry() aracını rahatlıkla oluşturabiliyoruz.width(genişlik)=10,olarak gösterdik,sonra pencere aracını paketledik bunu giris.pack() satırı yardımıyla hallediyoruz. Kullanıcıya tek satırlık metin girme imkanı veren bir arayüz oluşturmuş olduk. *Herhangi bir pencere aracı oluşturduktan sonra pack ifadesi yardımıyla pencere aracımızı paketliyorduk.geomteri Yöneticileri bir pencere aracının nasıl görüneceğini,nerede duracağını belirlerler. Tkinterde üç adet Geometri Yönetisi bulunur. Pack Geometri Yöneticisi Grid Geometri Yöneticisi Place Geometri Yöneticisi Bu geometri Yöneticilerinin herbirinin ayrı özellikleri vardır ve bunların her biri belli bir işlevi yerine getirmede daha başarılıdır.pack ve Grid Geometri Yöneticileri genel olarak hemen her işi yapmamıza izin verir.o yüzden bu iki Yönetici gayet kullanışlıdır.place Geometri Yöneticisi ise pencere araçlarını pencere üzerinde yerli yerine oturtma konusunda çok ustadır. O yüzden pencere araçlarını istediğimiz şekilde pencere üzerine konumlandırmak istediğimiz zaman bu işi en kolay Place Geometri Yöneticisi yardımıyla yapabiliriz.geometri Yöneticileri ile ilgili aklımızda tutmamız gereken en önemli şey aynı pencere üzerinde birbirinden farklı Yöneticileri bir arada kullanmamaktır.pencere araçlarını istediğimiz şekilde dizmek için en uygun geometri yöneticisi place adlı olandır. Burada dikkatimizi çeken relx ve rely seçenekleri koordiatlarını gösteriyor.buna göre x düzlemi üzerinde 0.0 konumunda ;y düzlemi üzerinde ise 0.1 konumunda yer alıyor.yani yukarıdan aşağıya 0.0,soldan sağa 0.1 konumunda bulunyor pencere aracımız.
Örnek : 1.Basit Bir grafik arayüzü oluşturalım. 2.iki kutuluk Entry() aracı oluşturalım: 3.Entry() araçlarından aldığımız karakter dizilerini tek tek sayıya dönüştürelim 4. bunları birbiriyle toplayıp print() fonksiyonu yardımıyla ekrana çıktı olarak verelim. #!/usr/bin/env python window.title("iki sayinin Toplami") window.geometry("250x200+10+10") def toplama(): veri1=entry1.get() veri2=entry2.get() sayi1=int(veri1) sayi2=int(veri2) sonuc="%s+%s=%s"%(sayi1,sayi2,sayi1+sayi2) print sonuc label=label(text="sayi1") label.place(relx=0.0,rely=0.0) entry1=entry(bg="white",width=8) entry1.place(relx=0.1,rely=0.0) label=label(text="sayi2") label.place(relx=0.0,rely=0.1) entry2=entry(bg="white",width=8) entry2.place(relx=0.1,rely=0.1) button=button(text="topla",command=toplama,activebackground="blue",bg="red") button.place(relx=0.0,rely=0.4)
kutuya ne yazarsanız yazın, yazdığınız şey her defasında bir karakter dizisi olarak alınacaktır. Peki bu bilgi neden bu kadar önemli? Eğer get() ile gelen verinin karakter dizisi olduğunu bilmezseniz, kullanıcının girdiği verilerle mesela aritmetik işlem yapamazsınız! Burada gördüğünüz gibi, kullanıcının kutuya girdiği değeri get() metoduyla aldıktan sonra int() fonksiyonunu kullanarak bir sayıya çevirdik. Eğer bu işlemi yapmazsak programımız hata verecektir. Çünkü bildiğiniz gibi karakter dizileriyle aritmetik işlem yapılamaz.bu bilgiyi biraz önce oluşturduğumuz iki kutuluk arayüze de uyguladık: get() metodunu anlatırken verdiğimiz son kodlarda, toplama işleminin sonucunu komut satırına yazdırdık. Bildiğiniz gibi, eğer isteseydik bu işlemin sonucunu bir Label() aracına da yazdırabilirdik: window.title("iki sayinin Toplami") window.geometry("250x200+10+10") def toplama(): veri1=entry1.get() veri2=entry2.get() sayi1=int(veri1) sayi2=int(veri2) sonuc="%s+%s=%s"%(sayi1,sayi2,sayi1+sayi2) label=label(text=sonuc) label.place(relx=0.2,rely=0.4) label=label(text="sayi1") label.place(relx=0.0,rely=0.0) entry1=entry(bg="white",width=8) entry1.place(relx=0.1,rely=0.0) label=label(text="sayi2") label.place(relx=0.0,rely=0.1) entry2=entry(bg="white",width=8) entry2.place(relx=0.1,rely=0.1) button=button(text="topla",command=toplama,activebackground="blue",bg="red") button.place(relx=0.0,rely=0.4)
Entry() aracından veri Silmek Bu satır sayesinde girişteki sayı ekrana basıldıktan sonra ekranın 0.konumundan sonuncu konumuna kadar bütün herşeyi siliyoruz.böylelikle ikinci gelecek sayi için yer açmış oluyoruz. window.title("iki sayinin Toplami") window.geometry("250x200+10+10") def toplama(): veri1=entry1.get() veri2=entry2.get() sayi1=int(veri1) sayi2=int(veri2) entry1.delete(0,end) entry2.delete(0,end) sonuc="%s+%s=%s"%(sayi1,sayi2,sayi1+sayi2) label=label(text=sonuc) label.place(relx=0.2,rely=0.4) label=label(text="sayi1") label.place(relx=0.0,rely=0.0) entry1=entry(bg="white",width=8) entry1.place(relx=0.1,rely=0.0) label=label(text="sayi2") label.place(relx=0.0,rely=0.1) entry2=entry(bg="white",width=8) entry2.place(relx=0.1,rely=0.1) button=button(text="topla",command=toplama,activebackground="blue",bg="red") button.place(relx=0.0,rely=0.4)