|
|
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