PYTHON ĐLE PROGRAMLAMAYA GĐRĐŞ

Cihangir BEŞĐKTAŞ
cihangir[at]akademi[dot]EnderUNIX[dot]org http://www.EnderUNIX.org 13 Mayıs 2008

ĐÇĐNDEKĐLER: PYTHON DĐLĐNĐN ÖZELLĐKLERĐ PYTHON' A GĐRĐŞ ARĐTMETĐK ĐŞLEMLER VERĐ TĐPLERĐ KONTROL DEYĐMLERĐ FONKSĐYONLAR MODÜLLER PAKETLER HATALAR ve ĐSTĐSNALAR SINIFLAR PYTHON’DA MYSQL VE QT ĐLE GUI UYGULAMASI 1 1 1 1 5 7 9 10 11 12 14

Python ile Programlamaya Giriş

1

Değişken isimleri rakamla başlayamaz. 2.VERĐ TĐPLERĐ Python daki standart veri tipleri "sayılar(integer. Etkileşimli kabuk daha çok kısa programlar için ve genelde test etmek için kullanılır.*. Örnek: >>> 8**2 64 Karmaşık sayılar üzerinde de işlem yapılabilir: >>> (3 + 3j) + (4 -1j) (7+2j) 4. Diğeri ise programları dosyaya yazmaktır. character). listeler(lists).PYTHON' A GĐRĐŞ Öncelikle python sisteminize yok ise www. Bunlardan biri etkileşimli python kabuğunu kullanmak. Her ne kadar sadece yorumlamalı gözükse de "byte code" biçiminde derleme yapılır. float). * Hızlıdır. Eğer UNIX kullanıyorsanız bu modülleri paket yöneticiniz aracılığıyla yükleyebilirsiniz. * Ticari uygulamalar geliştirmeye uygundur. Ayrıca '**' üs almak için kullanılır./ işlemleri mevcuttur. 3. Otomatik olarak algılanır. Yalnız bunları kullanırken tip uyuşmazlığına dikkat etmek gerekir.PYTHON DĐLĐNĐN ÖZELLĐKLERĐ * Nesneye yönelikdir.1. sözlükler(dictionaries). Đhtiyacınız olabilecek hemen hemen tüm özellikler mevcuttur.1. Tanımlarken türünü belirtmenize gerek yoktur. dosyalar(files)" dır. * Taşınabilir. tüpler(tuples).ARĐTMETĐK ĐŞLEMLER +. * Güçlüdür.Sayı değişkenleri: >>>a=6 >>>b=7 >>>a+b 13 >>>c=(1+1j) Python ile Programlamaya Giriş 2 .org sitesinden sisteminize uygun olanı indirebilirsiniz.python. * Özgürdür. sözcükler(string. * Öğrenmesi kolaydır.-. Python iki şekilde kullanılabilir. * Yazılımı kolaydır. Ayrıca python ın yanında bazı modüllere ihtiyacınız olabilir. * Yorumlamalı ve derlemelidir. Bunun için kodu bytecode şeklinde verebilirsiniz ya da "py2c" ile C modülüne çevirip derleyebilirsiniz. 4.

'c++'] >>> liste[2:] ['python'.'python'.2. >>> liste[1:3] ['c++'.Sözcük değişkenleri: >>>a = "Merhaba Python" >>>print a Merhaba Python >>>b = " ile programlama" >>>a+b 'Merhaba Python ile programlama' Sözcükler için bazı fonksiyonlar vardır.b="5" >>> print a+int(b) 14 >>> str(a)+b '95' >>> len(str(a)+b) 2 4. Oluştururken köşeli parantez kullanılır.'python'] >>> liste[1] 'c++' >>> liste = liste + ['ruby'] >>> liste ['java'.'c++'. Bunlara örnek olarak listenin sonuna eleman eklemek için "liste.'ruby'] Listeler için de bazı fonksiyonlar vardır. >>> liste[-1] 'ruby' Liste elemanları aralık vererek de kullanılabilir. sayıyı sözcüğe çeviren “str()”. Bunlara örnek olarak sözcük olan değişkeni sayıya çeviren “int()”. >>> liste = ['java'.>>>d=(2+3j) >>>c+d 3+4j 4. Burada ilk eleman verilmezse 0 kabul edilir. bir elemanın listede kaç tane bulunduğunu döndürmek için Python ile Programlamaya Giriş 3 .'python'] >>> liste[:2] ['java'.Liste değişkenleri: Listeleri verileri tutan diziler şeklinde düşünebiliriz.3. >>> a=9.'python'] >>> liste ['java'.append(eleman)".'c++'.'c++'. sözcüğün uzunluğunu veren “len()” verilebilir.'ruby'] Ayrıca listeler ters indistende okunabilir.

sözlükteki bir anahtara karşılık gelen sözcüğü silen "sozluk.values()". herhangi bir elemanın indisini döndürmek için "liste.'2':'türkçe'} >>> sozluk {'1': 'fen'."liste. tüm sözcükleri silen "sozluk. Burada "liste" oluşturulan listenin ismi. Örnek bir fonksiyon çağrısı: >>> liste.count('java') 1 olabilir. Bu tipte anahtar-sözcük ikilisi vardır ve şu şekilde tanımlanırlar: sozluk={anahtar1:sözcük1.pop()".get(anahtar)".mod) Python ile Programlamaya Giriş 4 .Sözlük(dictionary) Değişkenleri: Python programcıları için sözlükler çok avantaj sağlar ve programcılar tarafından sıklıkla kullanılır. Örneğin "liste" olarak yularıdaki örneklerde tanımladığımız liste değişkeni. herhangi bir elemanı listeden çıkarmak için "liste. eleman olarak da 'python' verilebilir. >>> diller = ('c'.keys()".5.6.clear()".extend(liste)". 4.eleman)".Tüp(tuple) Değişkenleri: Tüpleri içeriği değiştirilemeyen listeler olarak düşünebilirsiniz. listeyi ters çevirmek için "liste.. 4. sözlükteki bir anahtara karşılık gelen sözcüğü getiren "sozluk. herhangi bir anahtarın sözlükte olup olmadığını tespit eden varsa 1 yoksa 0 döndüren "sozluk. bütün sozlüğü döndüren "sozluk.update(sozluk2)" fonksiyonları verilebilir. listeyi sıralamak için "liste.anahtar2:sözcük2..del(anahtar)". '2': 't\xc3\xbcrk\xc3\xa7e'} >>> sozluk['1'] 'fen' Burada 't\xc3\xbcrk\xc3\xa7e' sizi korkutmasın python türkçe karakterleri öyle algılıyor. listenin son elemanını çekmek için "liste. belli bir yere eleman eklemek için "liste.has_key(sozcuk)". Bunlara örnek olarak anahtarları döndüren "sozluk.len()" fonksiyonları verilebilir..index(eleman)".reverse()".insert(indis. iki listeyi toplamak için "liste.count(eleman)".sort()".items()". Parantez () kullanarak tanımlanırlar. listenin uzunluğunu döndürmek için "liste.4.Dosyalar(files): Dosyaları açmak için open() fonksiyonu kullanılır: dosyadeğişkeni=open(dizin.'python') >>> diller[1] 'python' 4. Yoksa türkçe karakter desteği var. Sözlükler için de bazı fonksiyonlar vardır.remove(eleman)". bir sözlüğe başka bir sözlüğü ekleyen "sozluk1.} >>> sozluk = {'1':'fen'. sözcükleri döndüren "sozluk. "eleman" ise listedeki elemanı temsil eder.

>=. if./dosya. * close() : Dosya kapatılır. Ayrıca lojik işlemler olarak "and(lojik ve)". <>(eşit değil) gibi karşılaştırma operatörlerini gerçekler.close() Bu işlemden sonra python ın çalıştırıldığı dizinde vi editörüyle dosyaya bakıldığında işlemlerimizi test etmiş oluruz. for vb. ekleme(a). not: Python da girintileme zorunludur. <.1.elif 5 < 3: Python ile Programlamaya Giriş 5 . * read() : Dosyanın tamamı bir sözcüğe okunur. * readlines() : Dosyanın tamamı bir listeye okunur. okuma ve yazma(rw) olmak üzere 4 modda açılabilir.ĐF DEYĐMLERĐ if karşılaştırma: doğruysa çalıştırılacak blok elif karşılaştırma: yürütülecek blok else: yürütülecek blok Yukarıdaki kullanım şekline sahip "if" deyimi istenen koşula göre istenen kod parçasının çalıştırılmasını sağlar./dosya. Yani aynı blokta olan kodlar aynı hizada yer almalıdır..KARŞILAŞTIRMA OPERATÖRLERĐ Python >. print "5 3 ten büyüktür. Şu şekilde bir işlem yapılabilir: >>> >>> >>> >>> dosyam = open('. 'w') dosyam. * readline() : Dosyadan bir satır okunur. ==." . <=.write("ilk satır\n") dosyam.. yazma(w).Dosya okuma(r). Bazı dosya işlemleri şunlardır: * write(x) : x sözcüğü dosyaya yazılır. bloklara girildiğinde programcı girintileme yapmak zorundadır. "or(lojik veya)" ve "not(lojik değil)" deyimlerine sahiptir. $vi ...txt'.2.txt ilk satır ikinci satır 5.KONTROL DEYĐMLERĐ 5. Örnek: >>>if 5 > 3: . 5. Eğer girintileme yapılmazsa program hata verir. * read(x) : Dosyadan x byte okuma yapılır.write("ikinci satır\n") dosyam.

Örnekle daha iyi görelim: >>> a = ['kedi'. print i . for degisken in liste: yürütülecek blok while karşılaştırma: yürütülecek blok "for" ve "while" deyimleri C ve C++ taki "for" ve "while" deyimlerinden biraz farklıdır."break" VE "continue" DEYĐMLERĐ "break" C de olduğu gibi bulunduğu for veya while deyiminden çıkmayı sağlar.4.5): . print x.else: . artiş miktarı) Burada başlangıç verilmezse 0 dan başlar.. Hatta daha yeteneklidir." 5 3 ten büyüktür >>> 5.3. "continue" ise bağlı bulunduğu döngünün bir sonraki aşamasına geçilmesine neden olur.1.."range()" Fonksiyonu "range()" fonksiyonu belli bir aralıkta tamsayılardan oluşan bir liste oluşturmak için kullanılır. Örnekle görelim: Python ile Programlamaya Giriş 6 . 'aslan'] >>> for x in a: . len(x) . Yani "in" den sonra gelen nesnenin içindeki elemanlar döngüsel bir biçimde x e atanır ve işlemler yapılır....Örnekle görelim: >>> for i in range(3. bitiş.. 'kurt'." . print "5 3 ten küçüktür.. 3 4 5. kedi 4 kurt 4 aslan 5 Burada "in" kullanılır. tüpler. sözlükler üzerinde döngü yapabilme yeteneği vardır.... Artış miktarı verilmezse varsayılan değer 1 dir. print "5 3 e eşittir. range(başlangıç.3..."for" ve "while" DEYĐMĐ Bu deyimlerin kullanım şekli şöyledir.. Çünkü listeler... 5. Genel yapısı şöyledir.

a+b #aynı anda ikili atama yapılabilir . Yani bu bir yürütme eylemi değildir.. while b < n: .. Ayrıca bir değer döndüren fonksiyonlar da yazılabilir: >>> def fib2(n): . 6. Daha önceden python' da girintileme zorunludur demiştik...."pass" DEYĐMĐ "pass" deyimi bir şey yapmaz. >>> fib(2000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 Burada bu fonkison C de bildiğimiz "void" döndüren tipte bir fonksiyondur.append(b) ... a. n): . b = 0.5. 'eşittir'. Python ile Programlamaya Giriş 7 . a.. else:. . Bu girintilemeyi sağlamak için eğer deyime ait blokta bir işlem yapmayacaksak "pass" deyimini kullanırız.... Fonksiyonu yürütmek için o fonksiyona çağrı yapmak gerekir. return result . a.. 10): .. b = 0.. print n..... 'asal sayıdır' . .1... print n...>>> for n in range(2. x. '*'. Örneklerle görelim: >>> def fib(n): .... a. result = [] .. 1 ... n/x . """n ye kadar olan Fibonacci serisini yaz""" . break .FONKSĐYON TANIMLAMA Python da fonksiyonların genel tanımlama şekli şöyledir: def fonksiyon_adı(parametreler): yürütülecek blok Burada fonksiyon tanımlaması yapılır. for x in range(2... 1 ... 2 asal sayıdır 3 asal sayıdır 4 eşittir 2 * 2 5 asal sayıdır 6 eşittir 2 * 3 7 asal sayıdır 8 eşittir 2 * 4 9 eşittir 3 * 3 5. b = b... b = b.... while b < n: . result.. print b.. if n % x == 0: .FONKSĐYONLAR 6. a+b ....

FONKSĐYONEL PROGRAMLAMA ARAÇLARI Python' da fonksiyonları daha etkili kullanmak üzere 3 adet fonksiyon vardır: filter(). 11. Örnekle görelim: def ask_ok(prompt. complaint='Yes or no. 89] Fonksiyon parametrelerine varsayılan değerler yüklenebilir. please!'): while True: ok = raw_input(prompt) if ok in ('y'. 'refusenik user' print complaint Burada kullanıcıdan "yes" veya "no" girmesi isteniyor. aşama)" fonksiyonu aşama verilerinin hepsi için fonksiyonu çağırır.25] aralığındaki sayılar “filter()” fonksiyonuyla f(x) fonksiyonuna parametre olarak gönderildiğinde 2 ve 3 e bölünemeyen sayılar döndürülür.>>> f100 = fib2(100) # fonksiyon çağrısı >>> f100 # fonksiyonun çıktısı [1. 'no'. 19.y : x*y .5) 10 Burada lambda şu şablona sahiptir: lambda parametre_listesi:ifade 6. Burada varsayılan değerler "retries" için 4. a(2. Bunlardan biri “lambda()” dır. Kısa olan programları def ile tanımlamak yerine anında tanımlama yapma olanağı sağlar. "map(fonksiyon.2. 'nope'): return False retries = retries . map(). Örnek: Python ile Programlamaya Giriş 8 . 7. 'yes'): return True if ok in ('n'.please!'" dir. 34. 55. 'ye'. "complaint" için "'Yes or no. 3. 21. >>> filter(f. 8... "raw_input" kullanıcıdan veri alınmasını sağlar. retries=4. 23] Burada fonksiyon şöyle tanımlanmıştır. 13. Örnekle görelim: >>> a = lambda x. 25)) [5. range(2. Fonksiyonlar için özel fonksiyonlar da vardır.. 5. Sonucu bir liste şeklinde döndürür.. Burada fonksiyon 23 kez çağrılmıştır. "raise IOError" ise hata verilmesini sağlar. "filter(fonksiyon. reduce(). 'nop'. 17. 1. aşama)" yapısı fonksiyona aşama içindeki verileri parametre olarak atar ve aşama verisi doğruysa fonksiyonu çağırır.1 if retries < 0: raise IOError. Bu şekilde ilgili parametre verilmediğinde varsayılan değer kabul edilir. Daha iyi anlamak için örnekle açıklayalım: >>> def f(x): return x % 2 != 0 and x % 3 != 0 . Eğer x 2 ye ve 3 e bölünemiyorsa x i döndür. 2. 13. Bu tanımlamaya göre fonksiyona parametre olarak gelen [2.

4. 34. Ayrıca her fonksiyonun aynı dosyaya yazılması gerekmez. 8. a. 8. b = b. range(1. 1 while b < n: print b. Bu dosyalara fonksiyonlar tanımlanabilir. y): return x+y . Bu da modüler programcılığı oluşturur. 7. 1. 21.. 6.fib2(100) [1. >>> map(add. 5.MODÜLLER Program yazarken etkileşimli python kabuğunu kullanıyorsanız kabuğu kapattığınızda yazdıklarınız gider.aşama)" fonksiyonu peşpeşe çağrılan fonksiyonların birinden dönen değeri diğerine parametre olarak verip aşamalı işlemleri yapmayı sağlar. >>> reduce(add. b = b... seq. b = 0.py" isminde şöyle bir python dosyası oluşturalım: #vi fibo. 12. Bunun için programlar dosyalara yazılır.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.py def fib(n): a. b = 0. 89] >>> fibo.. 3. Örnek: >>> def add(x. Burada modulün ismi dosyanın ".append(b) a. 2. 14] "reduce(fonksiyon. >>> fibo. 55. a+b return result Daha sonra python kabuğundan bu dosyayı modül olarak çağıralım: >>> import fibo Şimdi bu dosyadaki fonksiyonları kullanabiliriz.>>> seq = range(8) >>> def add(x. 11)) 55 Yukarıdaki işlem 1 den 10 a kadar sayıları toplamayı sağlar.y): return x+y . 1 while b < n: result. Yani aynı işleve sahip fonksiyonları aynı dosyalara yazarak modüller oluşturulur. 10.__name__ 'fibo' Python ile Programlamaya Giriş 9 . Örneğin "fibo.py" uzantısı hariç geriye kalan isimdir. a+b def fib2(n): result = [] a. Farklı dosyalara farklı fonksiyonlar yazılabilir. seq) [0. 2. 13.

'ps1'.py auread. 'stderr'.py surround. 'path'.1. 'exc_info'. 'version_info'. 'setrecursionlimit'. '__stderr__'. 'exec_prefix'.py vocoder.py echo. '__stdout__'.. 'maxunicode'. 'maxint'.py .py aiffwrite.. 'fib'. '__doc__'. 'api_version'. >>> import fibo. 'hexversion'.Birden fazla dosyadan oluşan bir paket programı üretiyorsak her bir dosyada kullanacağımız modülleri ekleyerek istediklerimizi gerçekleştirebiliriz. #Üst düzey paket #Alt paket #Alt paket #Alt paket Burada şu şekilde paketlerdeki modüller çağrılabilir: >>>import Sound. Örnek bir paket yapısı şu şekildedir: Sound/ __init__. 'exit'.py equalizer. 'exc_clear'. 'fib2'] >>> dir(sys) ['__displayhook__'. sys >>> dir(fibo) ['__name__'. 'callstats'. Paketler alt modüllere ayrılmış yapıya sahiptir.py reverse. 'argv'."dir()" Fonksiyonu Bu fonksiyon parametre olarak verilen modülün hangi isimleri tanımladığını sıralı liste şeklinde döndürür.. '__name__'. 'platform'. 'getdefaultencoding'. 'setdlopenflags'. 'getdlopenflags'. 'builtin_module_names'.Effects.py wavread. 'stdout'. Filters/ __init__. Bu C/C++ daki "#include<>" da benzer.py wavwrite. 'excepthook'. 'copyright'.. 'getrefcount'. 'warnoptions'] 8. 'settrace'.echo Python ile Programlamaya Giriş 10 .py .py auwrite. '_getframe'. 'ps2'. 'displayhook'. 'setcheckinterval'. Effects/ __init__.py . 'prefix'. 'version'. '__stdin__'.py Formats/ __init__. 'byteorder'. 'getrecursionlimit'. 'meta_path'. 'stdin'. 7.PAKETLER Modüller hiyerarşik bir şekilde import edilmek istendiğinde paket yapısını kullanırız.py aiffread.py karaoke. 'path_importer_cache'. 'setprofile'.. 'path_hooks'. 'modules'.. 'exc_type'. 'executable'. '__excepthook__'.

line 1. (errno. in ? ZeroDivisionError: integer division or modulo by zero 9. line 1." except: print "Unexpected error:".exc_info()[0] Python ile Programlamaya Giriş 11 . strerror): print "I/O error(%s): %s" % (errno. #vi except.strip()) except IOError.Effects import echo 9. Örneğin “while” ‘dan sonra “:” koymayınca şöyle bir hata alırız: >>> while True print 'Hello world' File "<stdin>".2. in ? while True print 'Hello world' ^ SyntaxError: invalid syntax 9. sys. Bu hatalara örnek olarak sıfıra bölme hatası(division by zero) verilebilir. Bunu Python da şöyle yaparız.HATALARLA ÇALIŞMA Program yazarken kullanıcıdan veri aldığımızda kullanıcının istediği girişleri yapabileceğini düşünürüz.HATALAR ve ĐSTĐSNALAR 9. strerror) except ValueError: print "Could not convert data to an integer. Örnek olarak aşağıdaki kodu verebiliriz. Kullanıcı yanlış veri girdiğinde hata üretmemiz gerekir.readline() i = int(s.1. Bu eklemeyi şu şekildede yapabiliriz: >>>from Sound.Burada Sound paketinin alt paketi olan Effects paketinden echo modülü eklenmiştir.ĐSTĐSNALAR Đstisnalar(exceptions) program çalışırken oluşan hatalardır. >>>try: yürütülmek istenen blok except (hata_tipi): hata oluştuğunda yapılacak blok Burada hata_tipi opsiyoneldir. >>> 10 * (1/0) Traceback (most recent call last): File "<stdin>".SENTAKS HATALARI Sentaks hataları daha çok programın yazımından kaynaklanan hatalardır.txt') s = f. C/C++ a alışmış programcılar genelde Python a alışana kadar sentaks hatası yaparlar.py import sys try: f = open('myfile.3.

SINIFLAR Python da nesneleri oluşturmak için sınıflar kullanılır. Daha sonra “ValueError” (değer hatası) için tanımlama yapılmıştır. Genel sınıf tanımlaması şöyle yapılır: class sınıf_ismi: sınıfa ait fonksiyonlar Örnek: >>> class sinif: def __init__(self): self. Bunun sonucunda ise hata çıktısı alınmıştır.x 10 >>> a. 'Hata var!' .x ve a. Hata geldi! Traceback (most recent call last): File "<stdin>". line 2. Örneğe devam ederek görelim: >>> a = sinif() >>> a. ‘Hata var!’” satırı ile hata fonksiyonu çağırılmıştır.y çıktılarında daha önceden tanımladığımız değerler oluştu. print 'Hata geldi!' .HATA YÜKSELTME Hata yükseltme.y=20 Burada "sinif" isminde bir sınıf oluşturduk. raise . Bu sınıfın yapılandırıcısı yürütüldüğünden a.. Örnek: >>> try: .. Sınıflar değişkenlerden ve fonksiyonlardan oluşur. raise NameError. En son olarak ise bunların dışında olabilecek hatalar için tanımlama yapılmıştır. “raise NameError.... Dolayısıyla sınıfı oluşturduğunuzda “__init__()” fonksiyonu yürütülür. kullanıcının isteğine göre oluşturulan hataları yükseltmesini sağlar...4.x=10 self. 9. 10. except NameError: .raise Yukarıdaki kodda ilk except ile “I/O Error”(Giriş – Çıkış hatası) için tanımlama yapılmıştır. in ? NameError: Hata var! Burada “NameError” olduğunda yürütülecek bir hata fonksiyonu oluşturulmuştur.y 20 Görüldüğü gibi “a” değişkeniyle "sinif" ismiyle tanımlı bir sınıf oluşturuldu.. "__init__()" fonksiyonu python da sınıfların yapılandırıcısı(constructor) görevindedir.. Python ile Programlamaya Giriş 12 ..

..r = gercek . .goster() Burada görüldüğü gibi üst sınıfın yapılandırıcısının onu miras alan sınıf tarafından çağırılması gerekir. -4..x a..0..r.i (3.. def __init__(self): ...i = imajiner .gercek=g Python ile Programlamaya Giriş 13 . Örneğin "+" operatörünün yeniden yüklemenmesi şu şekilde olur: >>> class karmasik: ...... -4.. self.5) >>> x. gercek. self. Python çoklu miras almayı(multiple inheritance) da gerçekler. def goster(self): ..... print self. Miras alınan sınıfı üst sınıf olarak düşünürsek şu şekilde tanımlanır: class sınıf_ismi(üst_sınıf): sınıf içi tanımlamalar Örnek: >>> class X: ... self.. . Miras alındığında tanımlanan sınıf miras alınan sınıfın özelliklerini de içerir.i=0): .x >>> . x.y = 30 a = Y() a.0. Örnekle görelim.üst_sınıf2.x=25 .Sınıfları ilk çağırdığımızda belli parametreler ile de çağırabiliriz...5) Sınıflarda ayrıca miras alma(inheritance) da vardır. >>> x = Complex(3. def __init__(self. Bu parametreler "__init__()" fonksiyonunda belirtilir....y a. >>> class Complex: . imajiner): . . >>> >>> 25 >>> 30 >>> 25 class Y(X): def __init__(self): X.. self.): sınıf içi tanımlamalar Ayrıca operatörlere yeniden yükleme(operator overloading) de yapabilirsiniz..g=0... def __init__(self. O da şu şekilde gerçekleştirilir: class sınıf_ismi(üst_sınıf1..__init__(self) self.

' or '\h' for help. Şimdi bu veritabanından sorgu oluşturan gui uygulamasını yazalım.adres varchar(40)). tel. Type '\c' to clear the buffer.gercek.. or \g. "-" için "__coerce__()".. "EnderUNIX Akademi"). Bu uygulama UNIX te yapılmıştır. >>> a = karmasik(3. 0 rows affected (0...sayi): . Query OK..0.imaj+sayi. self. 1 row affected (0. Dolayısıyla mysql yüklü olmalıdır. mysql> create database islem.17 sec) mysql> insert into bilgi values ("Cihangir". +----------+------------+-------------+-------------------+ | ad | soyad | tel | adres | +----------+------------+-------------+-------------------+ | Cihangir | Besiktas | 05555555555 | EnderUNIX Akademi | +----------+------------+-------------+-------------------+ 1 row in set (0. Database changed mysql> create table bilgi (ad varchar(20). c."05555555555"..imaj=i .51a-3ubuntu5 (Ubuntu) Type 'help. def __add__(self.tel varchar(20).gercek+sayi. 11. Commands end with . Uygulamanın kodu şu şekildedir.39 sec) mysql> select * from bilgi.. soyad varchar(20)."Besiktas". 1 row affected (0. soyad. Query OK. Query OK. "/" için "__div__()" fonksiyonlarını yazmak gerekir. cihangir$ mysql -u root -p Enter password: Welcome to the MySQL monitor.12 sec) mysql> use islem.7) >>> c = a+b >>> print c.coding: utf-8 -*- Python ile Programlamaya Giriş 14 .py # -*.. return karmasik(self.37 sec) Bu şekilde “islem” isimli veritabanı ve ad. "*" için "__mult__()". Your MySQL connection id is 10 Server version: 5.imaj 8 11 Kodda da görüldüğü gibi "+" operatörünü yeniden yüklemek için "__add__()" fonksiyonunu yazmak gerekiyor..gercek. cihangir$ vi mysql. Mysql işlemleri şu şekildedir. Öncelikle programın kullanacağı veritabanını oluşturalım. adres bilgisini tutan “bilgi” isimli veritabanı oluşturulmuştur.self.imaj) .PYTHON’DA MYSQL VE QT ĐLE GUI UYGULAMASI Şimdi python da nasıl program yazılacağını öğrendiğimize göre konunun daha iyi pekişmesi için bir örnek yapalım.4) >>> b = karmasik(5. Diğer operatörlerde de durum benzerdir.

addWidget(self.DictCursor) cursor.addWidget(QLabel(u"Ad:"). 1. 0.QtGui import * import MySQLdb class SorguPenceresi(QDialog): def __init__(self): QDialog.addStretch(1) butonlar.setEnabled(False) self.iptal. 1) gb.soyad.connect(self.db="is lem") cursor=db.setTabOrder(self.soyad) self.connect(self.addWidget(self.ad = QLineEdit(self) self. 2) self.ad. SIGNAL("accepted()").sorgula) def sorgula(self): ad = (self. self.cursor(MySQLdb.soyad.reject) self.soyad. 200) self. 1.ekle) butonlar. 0) gb.ad) self.iptal = QPushButton(u"Đptal") self. SIGNAL("textChanged(const QString &)").Connection(host="localhost".text()) db=MySQLdb.cursors.soyad. SIGNAL("clicked()").setLayout(gb) self. SIGNAL("textChanged(const QString &)").connect(self.slotDenetle) self.__init__(self) self.iptal) gb = QGridLayout() gb.ekle.ad.slotDenetle) self.soyad = QLineEdit(self) self.addWidget(self. self.passwd="LONdon23". 1) gb. self.accept) self.ad.addWidget(QLabel(u"Soyad:"). 0) gb.execute("select * from bilgi where ad = \"%s\" and soyad = \"%s\"" %(ad.text()) soyad = (self.NoFocus) butonlar = QHBoxLayout() butonlar.addWidget(self.ekle.connect(self. self.ad. self. SIGNAL("clicked()").connect(self.resize(400.setTabOrder(self. 0.user="root". 1.QtCore import * from PyQt4.addLayout(butonlar.setFocusPolicy(Qt.setWindowTitle(u"Sorgula") self.ekle = QPushButton(u"Sorgula") self. 2.import sys from PyQt4. 0.iptal. self. self.soyad)) Python ile Programlamaya Giriş 15 .

close() QMessageBox. cihangir$ python mysql.ekle.u"<center>Ad: %s<br>Soyad: %s<br>Adres: %s<br> Tel: %s" %(R[0]['ad'].isEmpty() disable |= self.exec_()) if __name__ == "__main__": main() Bu kodu yazdıktan sonra uygulamayı çalıştırmak için komut satırından şu komut çalıştırılmalıdır.exit(app.py Komut çalıştırıldıktan sonra şu şekilde bir çıktı alınır: Sorgulanacak veri girildikten sonra “Sorgula” butonuna bastığımızda veritabanından sorgu yapıldıktan sonra şöyle bir çıktı alınır: Python ile Programlamaya Giriş 16 . text): disable = self.argv) pen = SorguPenceresi() pen.text(). R[0]['adres']. R[0]['tel'])) def slotDenetle(self.fetchall() cursor.information(self.isEmpty() self.R = cursor.show() sys. R[0]['soyad'].setDisabled(disable) def main(): app = QApplication(sys.u"Sorgu Sonucu".ad.soyad.text().

soyad = QLineEdit(self) self.ekle) butonlar.QtCore import * from PyQt4.iptal. 2) Python ile Programlamaya Giriş 17 . 0) gb. 1. Ayrıca mysql kullanımı için MySQLdb modülü eklendi.addWidget(QLabel(u"Soyad:"). 0.iptal = QPushButton(u"Đptal") self. self. 0) gb. class SorguPenceresi(QDialog): def __init__(self): Qdialog. import sys from PyQt4.addWidget(QLabel(u"Ad:").iptal) gb = QGridLayout() gb.QtGui import * import MySQLdb Öncelikle uygulama gui uygulaması olduğundan gerekli modüller eklendi.addWidget(self.NoFocus) butonlar = QHBoxLayout() butonlar. Yapılandırıcı __init__() fonksiyonu tanımlanır. fakat Qt GUI için güzel bir modüldür.ad.ekle = QPushButton(u"Sorgula") self.addWidget(self.ekle. 1. 2.soyad.setFocusPolicy(Qt.ad = QLineEdit(self) self. 0. 0.addWidget(self.setEnabled(False) self.__init__(self) Daha sonra ise sınıf tanımlaması yapılır. GUI için başka modüller de mevcuttur.addStretch(1) butonlar. Qdialog miras olarak alındığından onun da yapılandırıcısı çağırılır.Şimdi kodu parça parça açıklayalım.addWidget(self.addLayout(butonlar. 1) gb. 1) gb. 1.

soyad.ad.soyad.ad. Bu fonksiyon MySQLdb paketindeki fonksiyonları kullanarak önce mysql bağlantısı yapmış.connect(self.information(self.u"Sorgu Sonucu". SIGNAL("clicked()"). self.isEmpty() disable |= self.accept) self. Fonksiyonun sonunda ise “QmessageBox” ile ekrana mysql sorgusundan dönen sonuçlar basılmıştır.connect(self. 200) self.soyad.setTabOrder(self.ekle.ad.cursor(MySQLdb. Örneğin son üç satırda “Sorgula” tuşuna basıldığında “accept” in çalıştırılcağı. def slotDenetle(self. SIGNAL("textChanged(const QString &)").text()) db=MySQLdb.soyad.DictCursor) cursor. SIGNAL("textChanged(const QString &)").ad. R[0]['soyad'].connect(self.passwd="". self. SIGNAL("accepted()").soyad)) R = cursor.db="islem") cursor=db.fetchall() cursor. R[0]['tel'])) Yukarıda ise sorgula fonksiyonu tanımlanmıştır.text(). “accept” de çalıştırıldığında sorgu işlemlerini gerçekleştirecek “sorgula” fonksiyonunun çalıştırılacağı belirtilmiştir.resize(400.u"<center>Ad: %s<br>Soyad: %s<br>Adres: %s<br> Tel: %s" %(R[0]['ad']. text): disable = self.setWindowTitle(u"Sorgula") self.soyad) self. self.setDisabled(disable) Yukarıdaki “slotDenetle” fonksiyonu ise kullanıcıdan girişleri aldıktan sonra “Sorgula” butonunu etkin hale getiren kodu içermektedir.iptal.connect(self. self.ad) Yukarıda ise GUI arabirimleri tanımlanmıştır.text().slotDenetle) self. Python ile Programlamaya Giriş 18 .execute("select * from bilgi where ad = \"%s\" and soyad = \"%s\"" %(ad.user="root".Connection(host="localhost".sorgula) Daha sonra bu arabirimler üzerinde işlem yapıldığında yürütülecek işlemler belirtilmiştir.ekle. self. self. daha sonra ise bağlantıyı kapatmıştır.setTabOrder(self.cursors. SIGNAL("clicked()"). R[0]['adres']. self. daha sonra bir sorgu gerçekleştirmiş.close() QMessageBox.reject) self. def sorgula(self): ad = (self.self.isEmpty() self.text()) soyad = (self. self.connect(self.setLayout(gb) self.slotDenetle) self.

KAYNAKLAR www. GUI uygulaması geliştirmek için PyQt kullanmak isteyenler daha detaylı bilgileri internetten bulabilirler. fonksiyon tanımlamaları vb. miras alma.show() sys. if __name__ == "__main__": main() Program çalıştırıldığında ise yukarıdaki “if” bloğu “true” olacaktır ve program çalışacaktır.zetcode.def main(): app = QApplication(sys.argv) pen = SorguPenceresi() pen.exit(app. Bu program daha çok pythonda sınıf tanımlamaları.org/doc The PyQt4 Tutorial http://www.python. Yoksa bu programla çok detaylı bir GUI anlatımı amaçlanmamaktadır.com/tutorials/pyqt4/ Python ile Programlamaya Giriş 19 . Bu fonksiyon programın çalışmasını ve ilgili GUI elemanlarının gösterilmesini sağlamaktadır.exec_()) Burada ise “main” fonksiyonu tanımlanmıştır. nin nasıl yapıldığını göstermek için yazılmıştır.

Sign up to vote on this title
UsefulNot useful