[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Portugues  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

Hilaire Fernandes
taraf�ndan Hilaire Fernandes
<hilaire(at)ofset.org>

Yazar hakk�nda:

Hilaire Fernandes, Gnome projesi kapsam�nda e�itim i�in bedava yaz�l�m geli�tiren OFSET adl� organizasyonun ba�kan yard�mc�s�d�r. Ayn� zamanda, dinamik geometri i�in kullan�lan Dr. Geo isimli yaz�l�m� geli�tirmi�tir. Halen, Gnome projesi kapsam�nda, e�itim ama�l�, Dr. Genius isimli bir ba�ka matematik yaz�l�m� �st�nde �al��maktadir.



T�rk�e'ye �eviri:
B�lent �zdemir <bulentozdem(at)hotmail.com>

��erik:

 

Python ile Gnome Uygulamalar� Geli�tirmek (B�l�m 2)

Gnome

�zet:

Bu yaz� serisi, esas olarak, Gnome ve GNU/Linux alan�nda yeni ba�layan programc�lar i�indir. Programlama dili olarak Phyton se�ilmi�tir, ��nk� yeni ba�layan programc�lar bu dile, C gibi derleme yap�lmas� gereken dillerden �ok daha h�zl� girebilmektedirler. Bu makaleyi anlayabilmek i�in, Phyton un baz� programlama temellerini bilmeniz gerekmektedir.



 

Gerekli Ara�lar

G�sterilen program� �al��t�rmak i�in gerekli yaz�l�m, bu serinin ilk yaz�s�nda listelenmi�tir.

Ayn� zamanda �unlara da gereksiniminiz olacakt�r:

Kurulum i�lemi ve Python-Gnome'un LibGlade ile birlikte kullan�m� hakk�nda bilgi, yine bu yaz� serisinin ilk b�l�m�nde bulunabilir.

 

Drill(Deste�imiz)

�lk yaz�n�n amac�, Gnome, Glade, LibGlade ve Python kullanarak yap�land�r�m i�in yaz�lan bir program�n bile�enleri aras�ndaki mekanizmay� ve etkile�im kiplerini g�stermekti.

�rnekte GnomeCanvas widgeti kullan�lm��t�r. Bu �rnek bize renkli bir sunum sa�lad�g� gibi bu yap�land�r�m ile program geli�tirmenin ne kadar kolay oldu�unu g�sterir.

Takip eden b�l�mler i�in, Gnome'un de�i�ik widgetlerini a�iklayaca��m�z bir i��er�evesi i�erisinde �al��man�z� �neririm. Daha sonraki yaz�lar, Gnome'un bir�ok widgetini g�stermek i�in daha fazla �zellik ekleyerek bu i��er�evesini kullanmaktad�r.

���er�evemizin ad� Drill dir. Bu e�itim ama�l� kullan�lan bir ortamd�r ve bizim �rnek ve al��t�rmalar�m�zda da kullan�lacakt�r. Bu �rnekler, widgetlerinin kullan���n� g�steren tamamen e�itim ama�li �rneklerdir.

 

Glade ile aray�z olu�turmak

Widgetler

Uygulama penceresi Glade ile olu�turulur. �lk yaz�da oldu�u gibi, ilk �nce Gnome uygulamas� i�in bir pencere olu�turmal�s�n�z. Bu pencereden gereksiz ikonlar� ve men�leri silmelisiniz.

Drill in ana par�asi GtkPanedwidget'i kullan�larak iki �ali�ma alan�na b�l�n�r.

[Drill window]
1. �ekil - Drill ana pencersi

�ki �al��ma alan�n boyutlar�n� ayarlamak i�in kullan�lan bir tutamak ile, dikey olarak ikiye ayr�l�r. Soldaki �al��ma alan�, al��t�rman�n de�i�ik par�alar�n�n s�n�flar�na g�re depoland��� (GtkTree) ad� verilen bir a�a� yap�l� widget'i i�erir. Sa�daki �al��ma alan� bo�tur. Buras�, kullan�c�n�n se�ene�ine g�re al��t�rmalar� ekleyece�imiz yerdir.

Glade'den,Drill'in aray�z�n� incelemek, onun bile�enlerinin yap�s�n� daha yak�ndan g�rmemizi sa�lar.

[widgets in tree]
2. �ekil - Drill'in a� g�r�n�m�

2. �ekilde de g�rd���n�z gibi hpanedTree widget'i( GtkPaned tipinde) sadece tek bir widget -- frame2 (GtkFrame tipinde) i�erir (solda bulunan). frame2 exerciceTree widget'ini i�erir. �lk �nce GTK_SHADOW_IN g�lgesi tipinde bir GtkFrame widget'inin GtkPaned widget inin i�ine konulmas� tercih edilir. Bu tutama��n maskelenmesini �nler.

Son olarak, Gnome haberle�me kutusu "About Drill" ��yle g�r�necektir.

[Dialog window]
3. �ekil - Haberle�me kutusu "About" Drill

Onun de�i�ik par�alar�, Glade taraf�nda Properties penceresinin Widget se�ene�inden de�i�tirlebilir.

Widgetler ve i�lemci fonksiyon isimleri

A�a�idaki isimleri, bu widgetleri Pythton ile bu isimler alt�nda de�i�iklikler yapmak amac�yla kullan�n�z.

Gnome uygulama penceresi:
drillApp
Al��tirmalar a�ac�n� ay�ran tutamak :
hpanedTree
Al��t�rmalar a�ac�:
exerciceTree
Gnome hakk�nda haberle�me kutusu :
about

Bu widget isimlerini 2. �ekilde de g�rebilirsiniz.

Burada, i�lemci fonksiyonlar�n�n ismini h�zl�ca listeliyoruz. Bu konuda daha fazla bilgi istiyorsan�z, bu yaz� serisinin birinci b�l�m�n� okuyabilirsiniz.

Widget Ad� Signal ��lem
about clicked gtk_widget_destroy
about close gtk_widget_destroy
about destroy gtk_widget_destroy
button1 (Ara� �ubu�undaki
yeni tu�)
clicked on_new_activate
new activate on_new_activate
drillApp destroy on_exit_activate
exit activate on_exit_activate
about activate on_about_activate

Son ayarlamalar

Glade ile widgetlarin geometrisini ayarlamak m�mk�nd�r. Bizim orne�imizde, properties panelinin Common tab�n� kullanarak, drillApp in boyutunu 400*300 e ayarlayabilirsiniz. Ayrica, yatay b�lenin yerini 1 yerine 100 e ayarlayabilirsiniz.

�imdi, exerciceTree widgeti bir anda bir se�ime izin verecek �ekilde yaralanmal�d�r. Asl�nda, bir anda bir al��t�rma se�ilebilir. properties panelinden, Selection->Single i se�iniz. Bu widget i�in di�er se�enekler daha az onemlidir.

Harika! Drill i�in hepsi bu kadar. Gelecek yaz�da al��t�rmalar geli�tirmeye ba�layaca��z. �imdilik, aray�z� Python'dan kullanmay� ve GtkTree widgetinin nas�l de�i�tirilebilece�ini g�relim.

 

Python kodu

Kaynak kodun tamam� bu d�k�man�n sonunda bulunabilir. Kaynak kodu drill.glade dosyas� ile ayni dizine kaydetmelisiniz.

 

Gerekli mod�ller

from gtk import *
from gnome.ui import *
from GDK import *
from libglade import *

 

LibGlade ile grafik aray�z�

LibGlade ile grafik aray�z� geli�tirmek ve i�lemlerin ba�lant�s� bir �nceki �rnekte oldu�u gibi yap�lmaktad�r. Bu konuya tekrar geri d�nmeyece�iz.

Python program�nda global de�i�kenlerin tan�mlanmas�:

A�a� LibGlade ile olu�turulur ve a�c�n i�retleyicisi a�a��daki �a��r�mla elde edilir:

exerciceTree = wTree.get_widget ("exerciceTree")

Yatay panellerin i�aretleyicilerine de gereksinimimiz var. Asl�nda iki yatay panelin container referanslar�(GtkPaned)bir tutamak ile ayr�lm��t�r. Soldaki a�ac�, sa�daki al��t�rmalar� i�erir. �imdi etiketi oraya koyaca��z:

   paned = wTree.get_widget ("hpanedTree")
   label = GtkLabel ("No exercise selected")
   label.show ()
   paned.pack2 (label)

Birkez daha, GTK+ Reference manual -- GtkLabel ve GtkPaned nesneleri hakk�nda -- ve Python kaynak kodu /usr/lib/python1.5/site-packages/gtk.py size nesnelerin do�ru kullan�mlar� i�in gerekli olacakt�r.

 

GtkTree widgeti

�imdi yaz�n�n en �nemli k�sm�na geldik: GtkTree tipindeki a�ac�n kullan�m�.

A�a� addMathExercices(), addFrenchExercices(), addHistoryExercices() ve addGeographyExercices() fonksiyonlar�n�n ard arda ca��r�mlar� ile doldurulur. Bu fonksiyonlar birbirlerine �ok benzerler. Herbiri yeni bir alt s�n�f (alt a�a�) ve al��t�rmalar�n isimlerini ekler:

def addMathExercices ():
   subtree = addSubtree ("Mathematics")
   addExercice (subtree, "Exercise 1", "Math. Ex1")
   addExercice (subtree, "Exercise 2", "Math. Ex2")

Alta�a�

def addSubtree (name):
   global exerciceTree
   subTree = GtkTree ()
   item = GtkTreeItem (name)
   exerciceTree.append (item)
   item.set_subtree (subTree)
   item.show ()
   item.connect ("select", selectSubtree)
   return subTree

Varolan bir a�a�ta alt bir a�a� olu�turmak i�in iki �ey yapman�z gerekmektedir: alta�ac�n ismiyle bir GtkTree a�ac� ve GtkTreeItem maddesi olu�turmak. Daha sonra madde k�ke -- b�t�n s�n�flar� i�eren a�a� -- eklenir ve set_subtree() fonksiyonu kullanarak alta�a� maddeye eklenir. Son olarak select olay� maddeye ba�lan�r, b�ylece, s�n�f se�ildi�inde, selectSubtree() fonksiyonu �a��r�l�r.

GtkTreeItem

def addExercice (category, title, idValue):
   item = GtkTreeItem (title)
   item.set_data ("id", idValue)
   category.append (item)
   item.show ()
   item.connect ("select", selectTreeItem)
   item.connect ("deselect", deselectTreeItem)

Maddeler ba�l�k olarak al��t�rma isimlerini kullan�l�rlar Exercice 1, Exercice 2, ... gibi. Her maddeye ek bir id �zelli�i ili�kilendirilir. GTK+, GtkObject tipindeki her nesneye --her GTK+ widgeti ondan gelir -- baz� �zellikler ekleme olas�l��� vard�r. Bunu yapabilmek i�in iki fonksiyon vard�r; set_data (key, value) ve get_data (key) bir �zelli�e ilk de�eri vermek ve de�erini almak i�in kullan�l�r. Madde daha sonra kendi s�n�f�na eklenir -- bir alta�a�. G�r�nt�y� sa�lamak i�in onun show() fonksiyonu �a��r�l�r. Son olarak, select ve deselect olaylar� ba�lan�r. deselect olay� madde �zerindeki se�im kalkt���nda aktif olur. S�ras�yla, madde �zerindeki se�im kalkt��� zaman deselectTreeItem() fonksiyonu, sonra se�ilen madde i�in selectTreeItem() fonksiyonu �a��r�l�r.

 

��lemci fonksiyonlar

�u ana kadar �� i�lemci fonksiyonu tan�mlad�k :selectTreeItem(), deselectTreeItem() ve selectSubtree(). Bu fonksiyonlar metin etiketini -- sa� tarafta -- id �zelli�i ile g�ncellerler. �imdilik bu kadar.

 

Son s�z

Biz sadece, al��t�rmalar� (yeni ke�fedilen widget kadar) ekleyece�imiz i�sel yap�y� kurduk. Temel olarak GtkTree widgetini ve widgetlere �zellik etmeyi inceledik. Bu mekanizma, burada yapt���m�z gibi, s�kl�kla i�lemci fonksiyonlardan ili�kili bilgileri almak i�in kullan�l�r. Gelecek yaz�ya kadar, birinci b�l�mde kulland���m�z Couleur oyununu, Drill de bir al��t�rma olarak, de�i�tirmeyi deneyebilirsiniz.

 

Appendix: Kaynak kodun tamam�

#!/usr/bin/python
# Drill - Teo Serie
# Copyright Hilaire Fernandes 2001
# Release under the terms of the GPL licence
# You can get a copy of the license at http://www.gnu.org from gtk import *
from gnome.ui import *
from GDK import *
from libglade import * exerciceTree = currentExercice = label = None

def on_about_activate(obj):
    "display the about dialog"
    about = GladeXML ("drill.glade", "about").get_widget ("about")
    about.show ()

def on_new_activate (obj):
    global exerciceTree, currentExercice

def selectTreeItem (item):
    global label
    label.set_text ("L'exercice " +
             item.get_data ("id") + "est sélectionné.")

def deselectTreeItem (item):
    global label
    label.set_text ("L'exercice " +
             item.get_data ("id") + "est désélectionné.")

def selectSubtree (subtree):
    global label
    label.set_text ("No selected exercise")

def addSubtree (name):
    global exerciceTree
    subTree = GtkTree ()
    item = GtkTreeItem (name)
    exerciceTree.append (item)
    item.set_subtree (subTree)
    item.show ()
    item.connect ("select", selectSubtree)
    return subTree

def addExercice (category, title, id):
    item = GtkTreeItem (title)
    item.set_data ("id", id)
    category.append (item)
    item.show ()
    item.connect ("select", selectTreeItem)
    item.connect ("deselect", deselectTreeItem)

def addMathExercices ():
    subtree = addSubtree ("Mathématiques")
    addExercice (subtree, "Exercice 1", "Math. Ex1")
    addExercice (subtree, "Exercice 2", "Math. Ex2")

def addFrenchExercices ():
    subtree = addSubtree ("Français")
    addExercice (subtree, "Exercice 1", "Français Ex1")
    addExercice (subtree, "Exercice 2", "Français Ex2")

def addHistoryExercices ():
    subtree = addSubtree ("Histoire")
    addExercice (subtree, "Exercice 1", "Histoire Ex1")
    addExercice (subtree, "Exercice 2", "Histoire Ex2")

def addGeographyExercices ():
    subtree = addSubtree ("Géographie")
    addExercice (subtree, "Exercice 1", "Géographie Ex1")
    addExercice (subtree, "Exercice 2", "Géographie Ex2")

def initDrill ():
    global exerciceTree, label
    wTree = GladeXML ("drill.glade", "drillApp")
    dic = {"on_about_activate": on_about_activate,
        "on_exit_activate": mainquit,
        "on_new_activate": on_new_activate}
    wTree.signal_autoconnect (dic)
    exerciceTree = wTree.get_widget ("exerciceTree")
    # Temporary until we implement real exercice
    paned = wTree.get_widget ("hpanedTree")
    label = GtkLabel ("No selected exercise")
    label.show ()
    paned.pack2 (label)
    # Free the GladeXML tree
    wTree.destroy ()
    # Add the exercices
    addMathExercices ()
    addFrenchExercices ()
    addHistoryExercices ()
    addGeographyExercices ()

initDrill ()
mainloop ()

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Hilaire Fernandes, FDL
LinuxFocus.org

Buray� klikleyerek hatalar� rapor edebilir ya da yorumlar�n�z� LinuxFocus'a g�nderebilirsiniz
�eviri bilgisi:
fr --> -- : Hilaire Fernandes <hilaire(at)ofset.org>
fr --> de: Günther Socher <gsocher(at)web.de>
de --> en: Guido Socher <guido(at)linuxfocus.org>
en --> tr: B�lent �zdemir <bulentozdem(at)hotmail.com>

2002-01-30, generated by lfparser version 2.21