|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano ChineseGB Deutsch Francais Nederlands Portugues Turkce |
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: |
�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.
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.
�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.
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.
�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.
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.
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.
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.
Kaynak kodun tamam� bu d�k�man�n sonunda bulunabilir. Kaynak kodu drill.glade dosyas� ile ayni dizine kaydetmelisiniz.
from gtk import *
from gnome.ui import *
from GDK import *
from libglade import *
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.
�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.
�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.
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.
#!/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 ()
|
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:
|
2002-01-30, generated by lfparser version 2.21