Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Turkce  

convert to palmConvert to PalmDoc

Hilaire Fernandes
taraf�ndan Hilaire Fernandes

Yazar hakk�nda:

Hilaire Fernandes, Gnome masa�stleri i�in �cretsiz e�itim yaz�l�mlar�n�n geli�imini tan�tan bir organizasyon olan OFSET 'in ikinci ba�kan�d�r. Ayr�ca, �d�l kazanan Dr.Geo ad�ndaki etkile�imli geometri yaz�l�m�n� yazm��t�r ve �u s�ralar Dr.Genius ad�nda Gnome masa�st�nde �al��an ba�ka bir matematik e�itim yaz�l�m� ile u�ra�maktad�r.


��erik:

Python ile Gnome Uygulamalar� Geli�tirme(B�l�m 1)

�eviri : �zlem Erda�

Gnome

�zet:

Bu makaleler serisi �zellikle Gnome programlama ve GNU/Linux 'a yeni ba�layanlar i�in yaz�lm��t�r. Se�ilen geli�tirme dili Pyhon, C gibi derlemeli dillerde yayg�n olan a��r� y�kten ka��nmaktad�r. Bu makaleyi okumadan �nce Python programlama hakk�nda bir miktar bilgi gerekmektedir.



 

Gereken Ara�lar:

Bu makalede tan�mlanan program� �al��t�rabilmek i�in en az�ndan �una ihtiyac�n�z var:

Pyhton-Gnome ve LibGlade 'i kaynaklardan y�klemek i�in:

./configure
make
make install

ufak bir hile olacakt�r. (Daha fazla a��klama i�in
http://www.linuxgazette.com/issue38/pollman.html ] Ayr�ca Python ortam de�i�keni PYTHONPATH 'in Python-Gnome birimlerinin y�klendi�i yola ayarl� olup olmad���n� kontrol etmelisiniz. Bu yol /usr/local/lib/python1.5/site-packages ya da /usr/lib/python1.5/site-packages/ olabilir. Burada Gnome ve LibGlade i�in gerekli b�t�n ba�lant�lar� bulursunuz, mesela libglade.py birimini orada bulabilirsiniz. PYTHONPATH 'i ayarlamak i�in .bash_profile 'a sadece �unu ekleyin:

PYTHONPATH=/usr/local/lib/python1.5/site-packages
export PYTHONPATH

Unutmay�n ki bu de�i�ken tak�m�n� elde etmek i�in Python kodunuzu bir terminalden �al��t�rman�z gerekebilir.


 

Glade, LibGlade & Python etkile�imi

Glade, Damon Chaplin taraf�ndan geli�tirilen bir aray�z kurucusudur. Gnome/Gtk grafiksel kullan�c� aray�zlerinin grafiksel ve etkile�imli yap�lar�na izin verir. Glade'de olu�turulan aray�z bir xml dosyas�nda saklanabilir ya da do�rudan C kaynak a�ac�nda yeralmak �zere C koduna ihra� edilebilir. Glade ayr�ca aray�z�n �e�itli k�s�mlar�na ili�tirilecek olan i�leyicilerin-fonksiyonlar�n- adlar�n�n tan�mlanmas�na izin verir. Mesela belirli bir men� par�as�na bas�ld���nda �a�r�lacak olan fonksiyon (ad�).

LibGlade, James Henstridge'in bir Glade xml dosyas� taraf�ndan temsil edilen aray�z� olu�turmak i�in yazm�� oldu�u bir k�t�phanedir. Uygulama sadece xml dosyas�ndan - genelde .glade uzant�s�yla biten - haberdar olmay� gerektirir ve sonra LibGlade k�t�phaneyi bundan olu�turabilir. James Henstridge ayr�ca Gnome-Python paketinde bulunan LibGlade Python ba�lant�s�n� yazm��t�r. LibGlade ayr�ca .glade dosyas�nda tan�mlanan i�leyicicilerden Python kodunda tan�mlanan fonksiyonlara otomatik-ba�lant�ya izin verir.

A�a��daki garfik genel mekanizmay� g�stermektedir. Python ba�lant�s�n�n nas�l uyguland���n� anlamak i�in bazen PYTHONPATH 'te yerle�mi� Gtk, Gnome ve LibGlade Python birimlerine bakmak ve onlar� C Gtk/Gnome geli�tirici d�k�manlarla kar��la�t�rmak gerekir.

 

couleur adl� ilk �rnek

Gnome-Python programlamaya bir ilk yakla��m olarak, �ocuklar�n ayn� renkteki �ekilleri tan�mas�n� gerektiren basit bir renk oyununu �neririm. Bu �rnek grafi�e y�neliktir ve Gnome Canvas ve Gnome Uygulama Penceresi gibi Gnome'un g�zel �zelliklerini sunar. oyunun kurallar� olduk�a basittir: Oyun tahtas� de�i�ik renlere sahip 16 �ekil - daireler, y�ld�zlar ve kareler - ile doldurulmu�tur. Bu 16 �ekil 8 �ift �zde� renge b�l�nm��t�r. Oyunu bitirmek i�in sadece bu 8 �ifti ba�ar�yla se�mek gerekir. Fikir edinmek i�in bu makalenin sonundaki kaynak koda bakmak ve sonra buradan tekrar ba�lamak isteyebilirsiniz.

 

Glade ile bir aray�z in�a etmek

H�nerli Aletler

Glade'i ba�latt�ktan sonra iki pencereniz olacakt�r. Birisi Palette ad�ndaki h�nerli alet kutusudur. Bu pencerede GTK+ Basic, GTK+ Additional ve Gnome i�inden aletin t�rlerini se�ebilirsiniz. E�er Gnome aletiniz yoksa Glade, Gnome deste�i olmadan derlenebilir. Kaynak Glade paketinin configure(yap�lanmas�)'unu kontrol edin. configure --help konfig�rasyon se�eneklerini a��klar.

As�l alandaki �b�r pencere yarat�lan aletleri listeler.

Glade ile �nce Gnome Uygulama Penceresini yarataca��z. Bu alet menu �ubu�u ve alet �ubu�u olan bir penceredir. Gnome Uygulama Penceresinin dibinde ayr�ca bir durum �ubu�u bulunur. Gnome Uygulama Penceresini yaratt�ktan sonra Widget Tree(alet a�ac�) diyalo�unu a��n (Glade'de g�r�n�m men�s�nde bulabilirsiniz). �imdi bu alette tam olarak nelerin bulundu�unu ke�fedebilirsiniz.

Bundan sonra Gnome uygulama aletinin as�l alan�na bir kanvas ekleyin. properties(�zellikler) diyalo�undan maksimal koordinatlar� 400'e, maksimal y�kseklik ve geni�li�i de 400'e ayarlay�n.


�imdi bir Gnome hakk�nda Diyalo�u olu�turun. Diyalo�un i�eri�ini Alet tabakas�ndaki properties(�zellikler) diyalo�undan ayarlayabilirsiniz.

B�t�n bu aletler Palette 'in Gnome kategorisinde yeralmaktad�r.

�imdi kullan�lmayan ikon d��melerini ve menu par�alar�n� kald�r�n. Alet �ubu�undaki Open(A�) ve Save(Kaydet) ikon d��melerini kald�r�n. Sonra men� �ubu�unu d�zenleyin (farenin sa� tu�uyla t�klay�p edit menu(men�y� d�zenle) 'y� se�in) ve File->New, File->Exit, Setting->Preferences ve Help->About hari� b�t�n men�leri kald�r�n.

Alet ve i�leyicilerin isimlerini ayarlamak

A�a��daki isimleri bu aletlere uygulay�n, b�ylece onlar� bu isimlerle Python'da kullanabiliriz:

Gnome Application Window(Gnome Uygulama Penceresi):
colorApp
Gnome About Dialog(Gnome Hakk�nda Diyalo�u):
about

��leyici isimleri, belirli bir alette bir olay meydana geldi�inde �a�r�lacak fonksiyon isimleridir. Bunun anlam�, Python'daki fonksiyonlar� bu isimleri kullanarak - ileride g�rece�iniz gibi - tan�mlayaca��m�zd�r. �rne�in, kullan�c� yeni ikon d��mesine bast���nda oyunu yenileyecek bir fonksiyon �a��rmak istiyoruz diyelim. Bunu Glade'den kurmak i�in ilk �nce aleti se�meniz, sonra da properties(�zellikler) diyalo�undaki Signals(Sinyaller) tabakas�ndan ayarlamad�nz gerekir.

Bizim �rne�imiz, sinyal t�klan�r. ��leyici, fonksiyon ad�d�r. A�a��daki diziler, kullan�lan t�m sinyalleri ve i�leyicileri sunar:

about(hakk�nda) diyalo�unda:

Widget name Signal Handler
about clicked gtk_widget_destroy
about close gtk_widget_destroy
about destroy gtk_widget_destroy

gtk_widget_destroy i�leyicisi GTK'da �ntan�ml�d�r. Sadece aleti yokeder.

colorApp penceresinde. �lk olarak, Glade par�alar men�s� i�in sinyalleri/i�leyicileri otomatik olarak se�er. �simlerini kontrol edebilirsiniz. �simlerini bu dizinin sonuna ekledim. Hem yeni men� par�as�n�n hem de yeni ikon d��mesinin ayn� i�leyiciyi payla�aca��n� g�receksiniz, normal olarak benzer ama�lar� vard�r:

Widget name Signal Handler
button1 (new icon button
on the toolbar
clicked on_new_activate
new activate on_new_activate
colorApp destroy on_exit1_activate
exit1 activate on_exit1_activate
about1 activate on_about_activate

Son dokunu�

Glade alet �ubu�undaki Options(Se�enekler) d��mesinden Project Options '� �a��r�n. General(Genel) tabakas�nda, plan giri�lerini a�a��daki gibi ayarlay�n:

Aletleri temsil eden dosya color.glade 'dir. Yolu, kendi ana dizininize ayarlay�n.

�imdi File(Dosya) men�s�nden dosyay� kaydedin. Kaynak kodunu kurmay�n, bu �zelli�i biz kullanm�yoruz.
Glade ile i�imiz �imdi bitti, art�k Python ile ba�layabiliriz.

 

Python kodu

Kodun tamam� d�k�man�n sonundad�r. Kod, color.glade dosyas�yla ayn� yere kaydedilmelidir.

 

Gerekli birimleri dahil etmek

from math import cos, sin, pi
from whrandom import randint
from gtk import *
from gnome.ui import *
from GDK import *
from libglade import *

math ve whrandom birimlerinden, Gnome ait olmayan cos, sin, randint gibi �zel fonksiyonlar� ve pi de�i�kenini dahil ediyoruz. Gnome'a �zel birimler gtk, GDK ve gnome.ui 'dir. C'de, gnome.h'yi dahil etmek b�t�n Gnome ba�l�klar�n� dahil etmemizi sa�lar. Pyhton'da, ilk �nce Gnome fonksiyonunun kullanmak istedi�iniz ba�lant�s�n�n hangi birimde yerle�ti�ini bulman�z gerekir. �rne�in, bir terminal penceresinden (kabuk)a�a��daki komutla "canvas" dizisini i�eren birimi arayabilirsiniz:

cd /usr/local/lib/python1.5/site-packages/gnome
grep canvas *.py

Yukar�daki komut Gnome ba�lant�s�n�n /usr/local/lib/python1.5/site-packages alt�nda kurulmu� oldu�unu varsayar.

 

Libglade ile aray�z y�kleme

Bu �renekte �ekiller - �zellikle y�ld�zlar, daireler ve kareler - i�in Gnome Canvas'� kullan�yoruz. Kanvas grafik par�alar� (elips, nokta, do�ru, dikd�rtgen), yaz� par�alar� ve hatta aletler i�in bir yer tutucudur. Asl�nda bir kanvas baz� kanvas gruplar�n� da i�erebilir. Sonu�ta bir kanvas grubuna kanvas par�alar� - bizim �ekillerimiz - yerle�tirilebilir. Varsay�lan durumda, bir kanvas k�k kanvas grubu ad�nda varsay�lan bir kanvas grubunu i�erebilir. Biz bu grubu �ekillerimizi yerle�tirmek i�in kullanaca��z.

�lk ba�ta baz� evrensel de�i�kenler tan�mlan�r:

�a�r�lacak ilk fonksiyon - initColor - color.glade dosyas�ndan aletler olu�turur ve i�leyicileri otomatik olarak aletlere ba�lar:

def initColor ():
    global rootGroup, canvas
    wTree = GladeXML ("color.glade",
                      "colorApp")
    dic = {"on_about_activate": on_about_activate,
           "on_exit1_activate": mainquit,
           "on_new_activate":on_new_activate}
    wTree.signal_autoconnect (dic)
    canvas = wTree.get_widget ("canvas")
    rootGroup = canvas.root ()

Bir aleti olu�turmak i�in GladeXML fonksiyonu kullan�l�r. Tabii ki color.glade dosyas�na giden yolu ayarlaman�z gerekir. Bizim Glade ile tan�mlad���m�z colorApp Gnome Uygulama Penceresini olu�turur ve g�sterir. D�n�� de�eri kullan��l� y�ntemlerle bir nesnedir - ger�ekte bir s�n�f.

Sonra Python'da tan�mlad���m�z i�leyicileri, color.glade 'de tan�mlad���m�z aletlere ba�lar�z. Bunun i�in, color.glade dosyas�nda tan�mlanan i�leyici adlar�n�n anahtarlar�n� tutan bir s�zl�k olu�turmam�z gerekir: on_about_activate, on_exit1_activate ve on_new_activate. Bu anahtarlarla ba�lant�l� de�erler Python'da tan�mlanm�� fonksiyon isimleridir.
Sonu� olarak, signal_autoconnect metodu i�in geri kalan k�sm�n� bizim i�in yapar.

En sonunda GladeXML 'in �a�r�l��� s�resince olu�turulan kanvas�n referans�n� - Python'da bir GnomeCanvas nesnesi - ve k�k kanvas grubunu - bir GnomeCanvasGroup nesnesi - geri getiririz.

Faydal� tavsiyeler

Python i�in Gnome ba�lant�s�n� kapsayan ger�ek bir elkitab� yoktur. Ancak, Gnome sanal y�relerinde C'de Gnome programlama ile ilgili pek �ok d�k�man mevcuttur. Bu d�k�manlara bakmak faydal� olabilir fakat Python i�in Gnome ba�lant�s�na da bakman�z da gerekecektir:

Ba�lant� �urada yerle�mi�tir: /usr/local/lib/python1.5/site-packages/gnome/ ya da /usr/lib/python1.5/site-packages/gnome/

Ba�lant�ya g�zatmak baz� �eyleri g�sterir:

  1. libglade.py ba�lant�s�nda:
  2. gnome/ui.py ba�lant�s�:

Python'daki her Gnome kullan�l���nda ilgili d�k�manlara ula�mak i�in ayn� �eyleri yapabiliriz. Bu fonksiyonlar hakk�nda daha fazla bilgi alman�z i�in ilgili Gnome d�k�manlar�n� okuyun.

 

��leyicileri tan�mlama

GUI'ye oto-ba�lant� i�in �� i�leyici mevcuttur. Bunlar on_about_activate, on_new_activate ve mainquit. Sonuncusu ger�ekte i�leyi�i durduran ve Python'dan ��k��� sa�layan bir Python fonksiyonudur.

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

Bu i�leyici Hakk�nda(About) Diyalo�unu a�ar. �ncelikle hakk�nda(about) diyalo�unu hat�rlatal�m - ger�ekte LibGlade bu diyalo�u GladeXML nesnesi sayesinde kurar. Hat�rlay�n; GladeXML, get_widget metodunu i�eren bir Python nesnesidir. Bu metod show metodunu i�eren bir GtkWidget nesnesi d�nd�r�r.

Tavsiyeler

gtk.py ba�lant�s�ndaki GtkWidget nesnesini aray�n. Bu nesnenin bir show metoduna sahip oldu�unu g�rebilirsiniz. Bir �nceki i�leyici g�vdesi �u �ekilde yaz�labilir: GladeXML("color.glade","about").get_widget("about").show().

def on_new_activate (obj):
    global rootGroup, colorShape
    for item in colorShape:
        item.destroy ()
    del colorShape[0:]
    buildGameArea (rootGroup)

Bu i�eyici yeni oyun alan�n� tekrar in�a eder. �ncelikle varolan �ekiller yokedilir. �ekiller GtkObject nesnelerinden t�retilen GnomeCanvasItem nesneleridir. destroy metodu GtkObject nesnesinde yeral�r. Daha sonra yeni oyun alan� in�a edilir.

 

GnomeCanvasItem

�ekli tan�mlama

buildGameArea fonksiyonu GnomeCanvasGroup grubunda oyun alan�n�n yarat�lmas�n� d�zenler. �ekiller - GnomeCanvasItem -, buildShape fonksiyonunun �a�r�lmas�yla olu�ur. Bu �ek,ller daire, kare ya da y�ld�z olabilir.

Yarat�lan �ekle ba�l� olarak a�a��daki kodla �ekiller yarat�l�r:

item = group.add ("ellipse", x1 = x - r, y1 = y - r,
                  x2 = x + r, y2 = y + r, fill_color = color,
                  outline_color = "black", width_units = 2.5)

[...]

item = group.add ("rect", x1 = x - a, y1 = y - a,
                  x2 = x + a, y2 = y + a, fill_color = color,
                  outline_color = "black", width_units = 2.5)

[...]

item = group.add ("polygon", points = pts, fill_color = color,
                  outline_color = "black", width_units = 2.5)

group de�i�keni GnomeCanvasGroup nesnesinin referans�n� tutar. E�er ui.py ba�lant�s�n�n i�ine bakarsak, GnomeCanvasGroup grubunun bir add metodu oldu�unu g�r�r�z. �lk arg�man olan tp eklenecek par�an�n t�r�n� i�eren bir dizi bekler. Sonraki arg�manlar� anahtar kelime arg�manlar� ve de�erlerinden olu�an �iftlerdir, her biri bir s�zl��e kar�� gelir. Mevcut anahtar kelimelerin t�m listesini elde etmek i�in ui.py 'deki GnomeCanvasRect, GnomeCanvasEllipse ve GnomeCanvasPolygon nesnelerine bir g�z at�n.

elips ve dikd�rtgen birbirlerine benzerler, iki apsis ve ordinat koordinatlar� birbirine z�t iki tepe noktas� tan�mlar, �st-sol ve alt-sa�. Kanvas�n orijin noktas� varsay�lan de�er olarak kanvas�n �st-sol k�sm�nda yerle�mi�tir. polygon points anahtar kelimesinin de�erini bekler, bu anahtar kelime �okgenin noktalar�n� belirleyen �ift koordinatlar�n listesidir.

�ekle olay ekleme

�imdi yaratt���m�z her �ekle bir olay ba�layaca��z. Bu buildShape fonksiyonunun sonunda yap�l�r:

item.connect ('event', shapeEvent)
colorShape.append (item)

Sadece GnomeCanvasItem '�n ata nesnelerinden olan GtkObject 'in connect metodunu kullanaca��z. Bunun ilk arg�man� sinyaldir. GnomeCanvasItem '�n b�t�n olay �e�itlerini kapsayan event adl� tek bir sinyali oldu�undan dolay� yaln�zca bu arg�man� event olarak ayarlayaca��z. �kinci arg�man bizim yazd���m�z i�leyici ad�d�r, burada shapeEvent olacak. B�y�k olas�l�kla ���nc� arg�mana veri ge�irebiliriz, ama burada buna ihtiyac�m�z yok. ��te bu kadar!

 

Olay�n �ekli

�imdi �ekiller i�in i�leyici yarat�l���:

def shapeEvent (item, event):
    global selectedItem, itemToSelect, colorShape
    if event.type == ENTER_NOTIFY and selectedItem != item:
        #highligh outline
        item.set(outline_color = 'white')
    elif event.type == LEAVE_NOTIFY and selectedItem != item:
        #unlight outline
        item.set(outline_color = 'black')
    elif event.type == BUTTON_PRESS:
        #select the item
        if not selectedItem:
            item.set (outline_color = 'white')
            selectedItem = item
        elif item['fill_color_gdk'] == selectedItem['fill_color_gdk'] \
             and item != selectedItem:
            #destroy both item
            item.destroy ()
            selectedItem.destroy ()
            colorShape.remove (item)
            colorShape.remove (selectedItem)
            selectedItem, itemToSelect = None, itemToSelect - 1
            if itemToSelect == 0:
                buildGameArea (rootGroup)
    return 1

��leyici �a�r�ld���nda, item de�i�keni olay�n olu�tu�u �eklin referans�n� i�erir ve event de olay� i�erir. GdkEvent olay�nda sadece �� �e�it olayla ilgilenece�iz:

Sonu� olarak i�leyici her zaman TRUE (1) d�nd�r�r. Bunun anlam�: sinyalin ba�ka par�alara yay�lmamas�d�r. Bunu olmas�n� istemeyiz, ��nk� bizim �eklimiz asla �st�ste binmez.  

Son s�z

B�t�n Python kodunu Gnome'a uygun olarak b�rakmad�m, anla��lmas� �ok da g�� olmamal�. Bu basit dersteki temel amac�m baz� �eylerin nas�l �al��t���n� kendi kendinize anlayabilece�inizi g�stermekti: Python i�in Gnome ba�lant�s�na bakmak ve C programlama i�in Gnome d�k�manlar�n� okumak. Tabii ki Gnome Canvas ve Glade/LibGlade'in ne kadar kolay ve g��l� oldu�unu da g�sterdim. �u andan itibaren bu kodu geni�leterek yapabilece�iniz pek �ok �ey var. (Bu makale i�in kaynak dosyalar� burada bulabilirsiniz.)

 

Ek: Kayna��n tamam�

#!/usr/bin/python
# Couleur - Teo Serie
# Copyright Hilaire Fernandes 2000
# Release under the terms of the GPL licence version 2
# You can get a copy of the license at http://www.gnu.org
#
# Select shapes with same color
#
from math import cos, sin, pi
from whrandom import randint
from gtk import *
from gnome.ui import *
from GDK import *
from libglade import *

width, itemToSelect = 400, 8
selectedItem = rootGroup = canvas = None
# to keep trace of the canvas item
colorShape =[];

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

def on_new_activate (obj):
    global rootGroup, colorShape
    for item in colorShape:
        item.destroy ()
    del colorShape[0:]
    buildGameArea (rootGroup)

def shapeEvent (item, event):
    global selectedItem, itemToSelect, colorShape
    if event.type == ENTER_NOTIFY and selectedItem != item:
        #highligh outline
        item.set(outline_color = 'white')
    elif event.type == LEAVE_NOTIFY and selectedItem != item:
        #unlight outline
        item.set(outline_color = 'black')
    elif event.type == BUTTON_PRESS:
        #select the item
        if not selectedItem:
            item.set (outline_color = 'white')
            selectedItem = item
        elif item['fill_color_gdk'] == selectedItem['fill_color_gdk'] \
             and item != selectedItem:
            #destroy both item
            item.destroy ()
            selectedItem.destroy ()
            colorShape.remove (item)
            colorShape.remove (selectedItem)
            selectedItem, itemToSelect = None, itemToSelect - 1
            if itemToSelect == 0:
                buildGameArea (rootGroup)
    return 1

def buildShape (group, number, type, color):
    "build a shape of 'type' and 'color'"
    global colorShape
    w = width / 4
    x, y, r = (number % 4) * w + w / 2, (number / 4) * w + w / 2, w / 2 - 2
    if type == 'circle':
        item = buildCircle (group, x, y, r, color)
    elif type == 'squarre':
        item = buildSquare (group, x, y, r, color)
    elif type == 'star':
        item = buildStar (group, x, y, r, 0.4, randint (3, 15), color)
    elif type == 'star2':
        item = buildStar (group, x, y, r, 0.6, randint (3, 15), color)
    item.connect ('event', shapeEvent)
    colorShape.append (item)

def buildCircle (group, x, y, r, color):
    item = group.add ("ellipse", x1 = x - r, y1 = y - r,
                      x2 = x + r, y2 = y + r, fill_color = color,
                      outline_color = "black", width_units = 2.5)
    return item

def buildSquare (group, x, y, a, color):
    item = group.add ("rect", x1 = x - a, y1 = y - a,
                      x2 = x + a, y2 = y + a, fill_color = color,
                      outline_color = "black", width_units = 2.5)
    return item

def buildStar (group, x, y, r, k, n, color):
    "k: factor to get the internal radius"
    "n: number of branch"
    angleCenter = 2 * pi / n
    pts = []
    for i in range (n):
        #external points of the star
        pts.append (x + r * cos (i * angleCenter))
        pts.append (y + r * sin (i * angleCenter))
        #internal points of the star
        pts.append (x + r * k * cos (i * angleCenter + angleCenter / 2))
        pts.append (y + r * k * sin (i * angleCenter + angleCenter / 2))
    pts.append (pts[0])
    pts.append (pts[1])
    item = group.add ("polygon", points = pts, fill_color = color,
                      outline_color = "black", width_units = 2.5)
    return item

def getEmptyCell (l, n):
    "get the n-th non null element of l"
    length, i = len (l), 0
    while i < length:
        if l[i] == 0:
            n = n - 1
        if n < 0:
            return i
        i = i + 1
    return i

def buildGameArea (group):
    global itemToSelect, selectedItem
    itemColor = ['red', 'yellow', 'green', 'brown', 'blue', 'magenta',
                 'darkgreen', 'bisque1']
    itemShape = ['circle', 'squarre', 'star', 'star2']
    emptyCell = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    itemToSelect, i, selectedItem = 8, 15, None
    for color in itemColor:
        # two items of same color
        n = 2
        while n > 0:
            cellRandom = randint (0, i)
            cellNumber = getEmptyCell (emptyCell, cellRandom)
            emptyCell[cellNumber] = 1
            buildShape (group, cellNumber, itemShape[randint (0, 3)], color)
            i, n = i - 1, n - 1

def initColor ():
    global rootGroup, canvas
    wTree = GladeXML ("color.glade",
                      "colorApp")
    dic = {"on_about_activate": on_about_activate,
           "on_exit1_activate": mainquit,
           "on_new_activate":on_new_activate}
    wTree.signal_autoconnect (dic)
    canvas = wTree.get_widget ("canvas")
    rootGroup = canvas.root ()

initColor ()
buildGameArea (rootGroup)
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:
en -> -- Hilaire Fernandes
en -> tr �zlem Erda�

2001-01-29, generated by lfparser version 2.6