Archive

Posts Tagged ‘python’

Python, Fonksiyona Parametre Olarak Fonksiyon Geçirmek

May 1st, 2010 Aşkın Yollu No comments

Bu yazıyı asıl yazma sebebim parametre olarak geçirilen fonksiyona geçirilecek parametreler :)
Parametre olarak geçireceğimiz fonksiyonlar belli bir sayıda parametre alıyorsa yapacağımız iş basit,

Mesela:

  1. def Merhaba(isim):
  2. print "Merhaba %s" % isim

Bunun gibi sadece tek parametre alan bir fonksiyon için aşağıdaki gibi bir fonksiyon yeterli olacaktır.

  1. def BuyukAbi(func, param):
  2. func(param)
BuyukAbi(Merhaba, "kelebek")
Merhaba kelebek
 

Bu fonksiyon parametre olarak aldığı func fonksiyonuna param parametresini geçirecektir.
Eğer fonksiyonun aldığı parametre sayısı belirsiz ise, yani farklı sayıda parametre alan fonksiyonlarla uğraşmak gerekiyorsa yanına birkaç ekleme daha yapmamız gerekiyor.

  1. def BuyukBuyukAbi(func, param):
  2. func(*param)

param parametresi bir liste olmak durumunda. Geçirilen fonksiyon kaç parametre alıyorsa listenin uzunluğu okadar olmalı.

BuyukBuyukAbi(Merhaba, ["kelebek"])
Merhaba kelebek
 
  1. def HepinizeMerhaba(isim1, isim2):
  2. print "Merhaba %s, merhaba %s" % (isim1, isim2)
BuyukBuyukAbi(HerpinizeMerhaba, ["kelebek", "Aşkın"])
Merhaba kelebek, merhaba Aşkın
 

PyGtk ile Sistem Çekmecesi

April 7th, 2010 Aşkın Yollu No comments

GtkGtk ile çok kolay bir şekilde geliştirdiğiniz uygulamayı sistem çekmecesinde gösterebilirsiniz.

Ufak bir örnek kod veriyorum. Onun üzerinden anlatacağım.

  1. import pygtk
  2. import gtk
  3.  
  4. class ShowIcon:
  5. def __init__(self):
  6. self.icon = gtk.StatusIcon()
  7. self.icon.set_from_file('gtk.png')
  8. self.icon.set_tooltip_text('Hello Python!!!')
  9. self.icon.set_visible(True)
  10. self.icon.connect("activate", self.hello)
  11. gtk.main()
  12.  
  13. def hello(self, widget):
  14. print 'Hello Python !!!'
  15.  
  16. if __name__ == '__main__':
  17. icon = ShowIcon()

6. satırda asıl işimizi yapacak olan StatusIcon nesnesini yaratıyoruz.
7. satırda sistem çekmecesinde hangi ikonun görüntüleneceğini belirtiyoruz. set_from_file ikonu dosyadan alacağımız anlamına geliyor. Eğer gtk'nın sunduğu standart ikonları kullanmak istiyorsanız set_from_stock kullanmalısınız.

icon.set_from_stock(gtk.STOCK_ABOUT)

8. satırda ikonun üzerine geldiğimizde görünmesini istediğimiz yazıyı belirliyoruz.
9. satırda ikonun başlangıçtaki görünürlüğünü belirliyoruz. Bu satırı yazmasak da görünür başlıyor.
10. satırda ikonun "activate" sinyali aldığında çağırmasını istediğimiz metodu belirliyoruz. Kısacası üzerine tıklandığında ne iş yapacağını belirtiyoruz. "activate" yerine "popup_menu" yazarsak ikona sağ tıkladığımızda çağrılacak metodu belirliyoruz.
11. gkt.main() haydi yapalım şu işi manasında :)

Ayrıntılı dökümanı PyGtk Belgelerinde bulabilirisiniz. Yukarıda verdiğim kodu ve benim kullandığım ikonu buradan indirebilirsiniz.

Categories: Gezegen, Programlama Tags: , , , , ,

PyGtk ve Thread Sorunu

April 6th, 2010 Aşkın Yollu 3 comments

GtkPyGtk ile ara yüzüzünü hazırladığım bir program içinde thread kullanmam gerekiyordu. Kod çalışıyordu fakat thread işlemi istediğim gibi çalışmıyordu. Arayüzde bir değişiklik olduğu zaman thread çalışıyor, onun dışında hiç bir şekilde tepki vermiyordu.

Uzun süre hatanın kodda olabileceğini düşündüm. Ama sonunda python gtk.main() ve thread 3'lüsünü aynı sorgu içinde googleda aratınca cevabı buldum. Gtk'ya thread kullandığımı anlatmam gerekiyordu :)

gtk.gdk.threads_init()

Bu satırı kodumun başına eklediğimde herşey istediğim gibi çalışmaya başladı :)

Sizde böyle bir sorunla karşılaşırsanız aklınızda bulunsun :)

Pardus Ağ Yöneticisi İle Eduroam Ağına Bağlanmak

December 7th, 2009 Aşkın Yollu 3 comments

PardusBikaç gündür Pardus ve Eduroam ile uğraşıyordum. Eduroama bağlanmak için pratik yollar buldum fakat hiç birisi Ağ Yöneticisi kullanarak bağlanmanın zevkini vermiyordu.

2 gün boyunca Ağ Yöneticisinin neresini değiştirmem gerektiğini arayıp durdum. Sonunda wireless-tools adlı paketin aradığım paket olduğunu keşfettim :) wireless tools paketi wpa_supplicant kullanarak wpa şifreleme kullanan ağlara bağlanmaya yarıyor. Sağolsun Pardus geliştiricileri wpa_supplicant paketi için dbus kullanan bir python betiği yazmışlar. Bu betik içinde tanımlanan methodlarla wpa_supplicantı yönetebiliyoruz. Bu betiğe eduroam ağına bağlanmak için gerekli parametreleri alan bir method ekledim.
Daha sonra wireless-tools paketi içindeki comar betiğine bu methodu kullanmasını sağlayacak birkaç değişiklik yaptım.

Sırf bu işi denemek için bugün okulum olmadığı halde sabahın 8'inde okula gelip deneme yaptım. Ayarlarını evde yaptığım için bilgisayarı açar açmaz internete bağlandı :) Hayatımda ilk kez yazdığım bir kod direk çalıştı :P

Düzenlediğim bu 2 pakete aşağıdaki adreslerden ulaşabilirsiniz.
http://github.com/askin/kelebekpisi/tree/master/wpa_supplicant/
http://github.com/askin/kelebekpisi/tree/master/wireless-tools/

Paketleri kendiniz derlemek için root yetkileriyle

 
pisi bi http://github.com/askin/kelebekpisi/raw/master/wpa_supplicant/pspec.xml
pisi bi http://github.com/askin/kelebekpisi/raw/master/wireless-tools/pspec.xml
 

komutlarını vermelisiniz, ardından oluşan pisi paketlerini kurabilirsiniz.

Ya da hazır ikili pisi paketlerini http://askin.ws/pisi/eduroam/ adresinden bulabilirsiniz.

Paketleri kurduktan sonra ayarları yaparken Güvenlik Türü seçeneğini "WPA & WPA2 Enterprise" olarak seçmelisiniz.

Son olarak wireless-tools paketi Pardus'un temel paketlerinden birisidir, wpa_supplicant paketi de wpa ağlarına bağlanmak için gerekli temel bir pakettir. Bunları Pardus deposu dışında bir yerden kurmak sisteminize zarar verebilir. Sorumluluk kullanıcıya aittir :)

Benim sistemime hiç bir şey olmadı, %99.99 olasılıkla sizin siteminize de zarar gelmez fakat ben yinede hiç bir sorumluluk almıyorum :)