Bölüm 4 Button 4.1 Button Nedir? Button (dü me), tkinter içinde bir snftr; ba³ka bir deyi³le bir widget'tir. Üstelik, Button, öteki GUI araç çantalarnn hemen hepsinde ayn ad ile var olan standart bir widget'tir. Arayüzlerde biçemleri ve i³levleri farkl olan dü meler yaratlabilir. Genellikle, Button nesnesi üzerine onun i³levini belirten bir etiket konulur. Bu durumda, dü me bir Label nesnesi ta³yor olur. Ta³nan nesne Label'in özeliklerine sahip olur. Button üzerine konulan etiket için, Label snfnn özelikleri geçerli olaca na göre, button üzerine text, resim (ikon) ya da her ikisi birden konulabilir. Text birden çok satr içerebilir, ama bir button için bir tek font türü seçilebilir. Label için bildi imiz gibi, dü me üzerine yazlan bir text içindeki bir ve yalnzca bir harn alt çizgili olabilir. Bu özelik, ksa yol tu³lar tanmlarken i³e yarar. Arayüzlerde dü meler, ço unlukla, olay yönetimi için kullanlr. Dü - meye tkland nda bir python fonksiyonu ça rlr ve fonksiyonun belirledi i olay olu³ur. Arayüz üzerindeki bir dü meden sonrakine geçmek için Tab tu³u kullanlabilir. Tabii, bu i³ bir olay yönetimidir. Tab tu³una basld nda, sonraki dü meyi etkin klan fonksiyonun ça rlmas gerekir. Arayüzlerde, button widgetleri pencerenin ba³l nda, menü çubu- unda ya da araç kutusu (toolbox) gibi yerlerde çok kullanlr. Kullancyla etkile³imi sa layan Checkbutton ve Radiobutton widget'leri özel button tipleridir. Onlar ayrca inceleyece iz.
22 BÖLÜM 4. BUTTON 4.2 Button Örnekleri lk i³imiz arayüzde kullanaca mz bütün ö eleri (widget, fonksiyon, öznitelik vb) programa ça rmak olmaldr. Bunun için >>> from t k i n t e r i m p o r t deyimini yazyoruz. Bunu yapmazsak, kullanaca mz her aracn önüne, örne in, tkinter.button gibi tkinteri yazmalyz. Ayrca küçük arayüzler için, kodlar IDLE ile yazabiliriz. Ama karma³k arayüzler için, kodlarmz NotePad gibi basit bir kelime i³lemci ile yazp.py uzantl bir dosya olarak uygun bir dizine kaydetmeyi al³kanlk edinmeliyiz. Bunu yaparsak, yazd mz program her istedi imizde ça rp yeniden ko³turabiliriz. kinci i³ olarak, arayüzün anata³ycsn yaratmalyz. Anata³yc, arayüzün monitörde kaplad alandr; yani ekranda açlan bir penceredir. O pencere Tk snfnn bir nesnesidir. O nesneyi yaratmak için Tk() kurucu metodunu kullanyoruz. Yaratlan nesneye eri³ebilmek için, onu bir pointer ile göstermeliyiz. Al³kanlklarmza göre, bir nesne yaratnca onu i³aret eden bir pointer tanmlanmaldr. Bu pointeri bir de i³ken ad gibi görece iz. imdi Tk() kurucusunun yaratt nesneyi i³aret eden pointere win diyelim. win pointeri, yalnzca yaratt mz anata³ycy gösteriyor. O nedenle ona, anata³yc'nn adym³ gibi bakabiliriz. Anata³ycy yaratp ona win adn vermek için; >>> win=tk ( ) deyimini yazyoruz. imdi iki dü me yaratp, onlar win üzerine koyaca z. Dü meler Button snfndan türetilen nesnelerdir. >>> b1 = Button ( win, t e x t="dü me1" ) >>> b2 = Button ( win, t e x t="dü me2" ) deyimileri iki tane dü me yaratr. Açklamalar: b1, Button snfndan Button() kurucu metodu ile türetilen bir nesnedir. Bu nesneye button (dü me) diyoruz. Kurucu metodun iki parametresi var. Birinci parametre: win. Bu parametre, dü meyi ta³yacak olan nesneyi gösterir. Bu parametreye ta³yc widget denilir. leride, dü meleri ba³ka ta³yclar üzerine koyaca z. kinci parametre: text="dü me1". Bu parametre dü menin üzerine konulacak etikettir. Dü me üzerine Dü me1 yazsn yazar.
4.2. BUTTON ÖRNEKLERI 23 b2 dü mesi de benzer biçimde yaratlm³tr. imdi, programmzn sonuna mainloop() fonksiyonunu ekleyelim ve Liste 4.1 biçimini alan programmz basitbutton.py adyla yazp bir yere kaydedelim. Programa mainloop() fonksiyonu eklenmezse, arayüz monitörde görünmez. Liste 4.1. from t k i n t e r i m p o r t win = Tk ( ) 3 b1 = Button ( win, t e x t="dü me1" ) b2 = Button ( win, t e x t="dü me2" ) mainloop ( ) Bu program derleyip ko³turmak için python b a s i t B u t t o n. py yazmak yetecektir. Tabii, bu komutun çal³mas için, ortam de i³kenlerinin uygun biçimde ayarland n varsayyoruz. Ekrana gelen arayüz ekil 4.1 biçiminde olacaktr. ekil 4.1: Pack Manageri Çal³mazsa Bu ³ekilde, bizim yaratt mz b1 ve b2 dü meleri görünmüyor. Dü meleri görünür yapmak için, son satrdan önce b1.pack() ve b2.pack() konu³landrc deyimlerini eklemeliyiz. Pack tkinter'de bir konu³landrcdr (Layout Manager). leride ba³ka konu³landrclar görece iz. Konu³landrclar, yaratlan widgeti, ta³yc üzerine konu³landrr. Konu³landrc deyimlerini ekleyince, programmz Liste 4.2'deki gibi olur. Liste 4.2. from t k i n t e r i m p o r t win = Tk ( )
24 BÖLÜM 4. BUTTON b1 = Button ( win, t e x t="dü me1" ) 4 b2 = Button ( win, t e x t="dü me2" ) b1. pack ( ) b2. pack ( ) 9 mainloop ( ) Bu pogram derleyip ko³turunca ekrana ekil 4.2'deki arayüz çkar. ekil 4.2: Pack Manageri Çal³rsa ekil 4.2 arayüzü ba³lktaki ö eler ve dü melerin geni³li ine ve yüksekli ine göre, kendi boyutlarn ayarlam³tr. stenirse, arayüzün boyutlar ve dü melerin konu³lanma biçemleri de- i³tirilebilir. Pack konu³landrcs dü meleri (TOP, LEFT, RIGHT, BOT- TOM) seçeneklerine göre ta³ycya yerle³tirir. Bu seçenekler widgeti ya ta- ³ycya göre ya da önce konu³lanan widgete göre yerle³tirir. Örne in, Liste 4.2'deki pack() konu³landrclarn 1 >>> b2. pack ( s i d e=left) >>> b1. pack ( s i d e=left) biçiminde yazarsak, artayüzümüz ekil 4.3: Pack Manageri Çal³rsa biçemini alr. Bu konu³lanma estetik görünmüyor. O zaman dümelerle ta- ³ycnn kenarlar arasnda bir yastklama (padding) yapmak gerekebilir. Bunun için konu³landrc deyimlere yatay yastklama için padx, dü³ey yastklama için pady ekleyelim. Bunlarn ölçü birimi px (pixel)'dir. Program
4.2. BUTTON ÖRNEKLERI 25 Liste 4.3 biçimini alr. ekilden anla³ld gibi, yastklama ta³ycnn ve ilk dü menin sol dü³ey kenarlarna göre yaplm³tr. Böyle oldu unu görmek için, fare ile arayüzün boyutlarn büyültünüz. Liste 4.3. from t k i n t e r i m p o r t win = Tk ( ) 3 b1 = Button ( win, t e x t="dü me1" ) b2 = Button ( win, t e x t="dü me2" ) 8 b1. pack ( s i d e=left, padx=10) b2. pack ( s i d e=left, padx=10) mainloop ( ) Bu program ko³turursak, ekrana çkan arayüzümüz ekil 4.4 biçemini alr. biçemini alr. ekil 4.4: Pack Manageri Çal³rsa Liste 4.4. 1 from t k i n t e r i m p o r t anapencere = Tk ( ) d e f c a l l b a c k ( ) : 6 p r i n t ( " T k l a! " ) b = Button ( anapencere, t e x t=" Evet ", command=c a l l b a c k ) b. pack ( ) 11 mainloop ( ) Açklamalar: 1.satr tkinter modülündeki bütün ö eleri ça ryor. 3.satr Tk() kurucu metodu ile Tk snfndan bir nesne yaratyor. Bu nesnenin ad anapencere'dir ve arayüzün anata³ycsdr. anapencere, yaratlan nesneyi i³aret eden pointerdir. Ama, al³kanlklarmza uyarak, ana- Pencere pointerine anapencere nesnesi diyoruz. Böyle demekte bir saknca
26 BÖLÜM 4. BUTTON yoktur; çünkü, anapencere pointeri bir tek nesneyi i³aret ediyor ve i³aret edilen nesneyi, i³aret eden pointer ile adlandryoruz. 5.satr callback() adl bir fonksiyon tanmlyor. Bu fonksiyon, dü meye tklannca ekrana "Tkla" sözcü ünü yazyor. 8.satr, Button snfndan b adl bir nesne (dü me) yaratyor (b pointerinin i³aret etti i nesne). Burada Button() kurucu metodunun üç tane parametresi var. Birinci parametre anapencere adndaki nesnedir. Bu parametre, kurucu tarafndan yaratlan button'un anata³yc üzerine konulmasn istiyor. kinci parametre text="evet" ifadesidir. Bu parametre yaratlan dü menin üzerine Evet yazl label'i (etiket) koyuyor. Üçüncü command=callback parametresi, Evet dü mesine baslnca callback() fonksiyonunu ça ryor; yani onu yürütüyor. Ça rlan fonksiyon ekrana Tkla yazyor. Böylece, Evet dü mesine her tklay³ta callback() fonksiyonu ça rlyor ve o da ekrana "Tkla" sözcü ünü yazdryor. Bu satr, aslnda bir tür döngü olu³turuyor. 9.satrdaki pack() fonksiyonu, anata³ycnn boyutunu içeri ine uyacak biçimde ayarlyor. command=callback yazlmazsa, dü meye tklaynca hiç bir ³ey olmaz. Buradaki command terimi dü meye i³levsellik kazandryor. Bir olay oluyor ve o olay yönetiliyor. ekil 4.5: Button Yaratma Dü me üzerine yazlan command=callback olmasayd, dü meye tklaynca hiç bir ³ey olmazd. Buradaki command terimi dü meye i³lev kazandryor. Bir olay olu³uyor. Bazen arayüze konulan bir dü menin i³levsiz kalmas istenebilir. Onun için, Button() kurucu metodundaki üçüncü parametre de eri olarak state = DISABLED yazlr. Bu durumda Liste 4.4'in 8.satr ³u biçimi alr: b = Button ( anapencer, t e x t="yardm", s t a t e=disabled) Bu de i³ikli i yaptktan sonra Liste 4.4 programn ko³turursak, ekrana ekil 4.6'de görülen
4.2. BUTTON ÖRNEKLERI 27 ekil 4.6: ³levsiz Button arayüz gelir. Bu arayüzde Yardm dü mesine tklad mzda hiç bir eylem olmaz. Dü menin boyutlarn height ve width öznitelikleriyle ayarlayabiliriz. Örne in, Liste 4.4'in 8.satrn ³öyle de i³tirirsek, ekrana ekil 4.7'de görülen arayüz gelir. b = Button ( anapencere, t e x t='dur', width =25, command=c a l l b a c k ) ekil 4.7: Button Boyutunu Ayarlama