powered by HastaBlog
 
Python ve Qt4 | Kategori: Programlama
Yazlma: 26.04.2008 | Okunma: 1732 | Yorumlanma: 0
Sonunda alýp ta bir kenara koyduðum Python kitabýný biraz okuma fýrsatý buldum. Hatta kitapla yetinmedim Python sitesinden temin edebildiðim diðer kaynaklara da bir göz attým. Türkçe dokümanlar, yabancý kaynaklar, Python'la yazan insanlarýn yorumlarý, forumlar, günlükler. Okudukça gaza geldim neymiþ abi bu Python diye. Dedim evet bu kadar okumak yeter otur kodla, baþka türlü öðrenemezsin.
Merhaba Dünya vazifemizi yerine getirdik tabi önce. Deðiþkenler, döngüler, þartlý dallanma komutlarý, Class'lara kadar þöyle üstün körü yazýlan örnekler. Tabii hep text ortam. Command Line' yazýlan mesajlar, Türkçe karakter sorunlarý.
Yok dedim böyle olmayacak, biraz grafiksel ortam lazým. Hani pencereler butonlar haybeye mi verdik Microsoft'a bu kadar lisans parasýný?
Bu sefer grafik desteðini araþtýrmaya baþladýk. Python kitabýmda Tkinter'den bahsediyor. Kolay kodlama ortamdan baðýmsýz ve sorunsuz çalýþma falan. Kulaða güzel geliyor. Uðraþtým biraz...
Uðraþtým da bana yetersiz geldi. Yani bir sürü güzellikten yoksun. Standart objeler kullanýyorsunuz. Yaptýðýnýz ekranlar kuru kuru duruyor. Sanki Win98 zamanýnda kodlanmýþ gibi XP temalarýný kullanmaya kalksanýz bir ton uðraþmakla kalmýyorsunuz bide ortamdan baðýmsýz özelliði uçup gidiyor. Yok dedim daha güzel bir yöntem olmalý, araþtýrmaya devam.
wxPython buldum önce, hatta Boa Constructor diye birde IDE buldum wxPython için. Kullanýþlý gözüküyor diye düþünürken.
Türkiye'de en çok Python kodlayan insanlar olduðunu düþündüðüm Pardus ekibinin grafiksel programlar için Qt kullandýðýný öðrendim. Bu sefer daha çok Türkçe kaynak bulurum diye Qt'ye kanalize ettim kendimi. Ara ara ara... Türkçe doküman sorunlarý yine. Yine her kafadan ayrý bir ses. Üstelik birde C++'ciler kullanýyor Qt'yi onlarýn dokümanlarý var. Allak bullak oldum iyice. Neyse anladýðým kadarýyla PyQt lazým önce. Buldum indirdim. Tabi kullandýðýnýz Python sürümüne uygun olaný seçmeniz lazým. Birde Qt3 var eski sürümüymüþ, Qt4 yeni sürümü, bir seçim yapmanýz lazým ki bu seçimi etkiliyen kriterler nedir hiç bilmiyorum. Merak ettim tabi ama birde bunun için araþtýrma yapmak zor geldiði için Qt4'te karar kýldým. Uzun lafýn kýsasý baþladým PyQt çalýþmaya. Tkinter'den biraz daha zor ama daha güzel sonuçlar üretiyor. Üstelik bide Qt Designer diye bir tool çýktý içinden dedim, iimiþ kullanýlýr bu.
Uzun lafýn kýsasý yürüdüm yürüdüm bir arpa boyu yol aldýktan sonra bir örnek program yazdým. Açýkçasý adam gibi çalýþtýrmak için 5-6 saat uðraþmýþýmdýr herhalde. Üstelik bir numarasýda yok yani. 1-100 arasý bir rakam tutuyor. Sonra size tahmin sorup, daha küçük yada daha büyük bir sayý girin diyor. Bildiðinizde de bilmem kaçýncý denemede bildiniz tekrar deneyin falan diyor. Bu yani.
Doðru düzgün çalýþtýðýnda ne kadar sevindiðimi anlatamam. Sonra birde baktým ki bu kadar týrt bir iþi yaptýrmak için verdiðim emeðe bak. Sevinmek yerine ciddi ciddi üzülmem lazým. Yani bu emekten kastým bu 5-6 saatlik uðraþým. Öncesindeki araþtýrmalarým deðil. En ufak bi sorunda Python dokümalarýna bak. Qt dokümalarýna gömül. Olmasýn forumlara göz at. Yýldým açýkçasý.
Birde yýllarýn alýþkanlýklarý var. Delphi kullanmýþsýn VB kullanmýþsýn yýllarca, alýþmýþsýn kolaylýklarýna ne istersen yapýyorsun kolayca. Kolay bir GUI'si var. Bir sürü kullananý var. Bolca kitabý var. Senin yapamadýklarýný daha önce yapamamýþ ve bunu forumlarda sorup öðrenmiþ bir sürü yurdum insaný var. Var oðlu var.
Bu kadar kolaylýk varken Python tokat gibi çarpýyor ister istemez. Ne doðru düzgün bir IDE'si var. Ne sorup öðrenebileceðiniz doðru düzgün bir kurum. Her kez ya çok çömez yada öyle ulu bir programcý ki size lütfen yazdýðý cevap aydýnlatmak yerine yeni sorulara gark ediyor bünyeyi.
Yaw mok atmak gibi olmasýn ama eeee hani Python süperdi. Olmadý kardeþ.
Bak þimdi mesala Qt Designer'da bi ekran tasarladýn. Bu tool bunu .ui olarak kaydetti mi? Ettii, güzel. Þimdi bunu bir alengirle .py koduna çeviriyorsun önce. Hemen çalýþmýyor tabi... Sonra kodu açýp çalýþmasý için baþka kodlar ekliyorsun. Bu sadece grafiksel ara birim için gerekli. Sonra programýn yapmasýný istediðin iþ için kendi kodlarýný yazýyorsun. Diyelim ki bu esnada dedin ki yahu burada bide þu olmalýymýþ bu ekranda. Yandýn. Hadi dön baþa. Qt Designer'dan tekar düzenle tekrar .ui, tekrar .py, tekrar kodla offfffff.
Þimdi bilenler diyecek ki. O iþ öyle Qt Designer'le olmaz zaten, adam gibi öðreneceksin. Tamamen kodla yazacaksýn arabirimini...
Valla buna diyecek doðru düzgün birþey bulamýyorum. Mazo'sunuz herhalde?
Tabiiki tercih meselesi ama Özgür Yazýlým çorbasýnda bizimde toz zerresi kadar da olsa tuzumuz olmasý için verilen bu uðraþ savaþ olmamalý. Tamamen kendi kanaatim elbette. Muhakkak hadi len diyenler olacaktýr. Olsun benim þu an çýkadýðým sonuç budur. Yaptýðým programý burda verceðim, kodlarýnýda elbette. Yanlýþ birþeyler varsa kodda yada izlediðim yolda, birileri beni uyarsýn. Bunu þöyle bir kolayý var desin. Çünkü bu süreçte anladýðým þudur ki; Python ve Qt kullanarak koca koca projeler yazan zatý muhteremlerde gerçekten derviþ sabrý var. Allah iniþ takýmlarýna zeval vermesin. Ne desem boþ.
Sonuç olarak yazýnýn devamýnda hem dosya olarak indirilebilir halde hemde text olarak programý veriyorum. Umarým birilerinin iþine yarar da tuz atmýþ olurum çorbaya.
Bu arada ben devam edermiyim Python'a bilemiyorum. Pek gazým kalmadý açýkçasý...

Not: Umarým kimseyi kýrmamýþýmdýr, bu yazýdaki amaç madolyonun diðer yüzünü birilerinin anlatmasý gerektiðini düþünmemdi sanýrým.


Ekran Görüntüsü:



Dosyalar (Download):

http://www.box.net/shared/y179w5h6ow

Kod:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'sayibul2.ui'
#
# Created: Fri Apr 25 17:22:12 2008
# by: PyQt4 UI code generator 4.3.3
#
# WARNING! All changes made in this file will be lost!
# Türker Girgin tarafýndan 25/04/08 tarihinde öðrenmek amaçlý yazýlmýþtýr.

import sys, random
from PyQt4 import QtCore, QtGui

class kontrol:
def __init__(self, ui):
self.ui = ui
def et(self):
global dene, tut
try:
tahmin = int(ui.lineEdit.text())
except ValueError:
ui.label.setText("Rakam girin lütfen!")
else:
dene += 1
if tahmin == tut:
ui.label.setText(str(dene) + ". Denemede buldunuz! Tekrar Deneyin..")
dene = 0
tut = random.randrange(0, 100)
elif tahmin > tut:
ui.label.setText(str(dene) + ". Deneme: Girdiginiz rakam büyük")
elif tahmin < tut:
ui.label.setText(str(dene) + ". Deneme: Girdiginiz rakam küçük")
ui.lineEdit.selectAll()
ui.lineEdit.setFocus()

class Ui_mainWindow(object):
def setupUi(self, mainWindow):
mainWindow.setObjectName("mainWindow")
mainWindow.setWindowModality(QtCore.Qt.NonModal)
mainWindow.resize(QtCore.QSize(QtCore.QRect(0,0,224,50).size()).expandedTo(mainWindow.minimumSizeHint()))
mainWindow.setMinimumSize(QtCore.QSize(224,50))
mainWindow.setMaximumSize(QtCore.QSize(224,50))

self.centralwidget = QtGui.QWidget(mainWindow)
self.centralwidget.setObjectName("centralwidget")

self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0,0,221,16))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")

self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(22,20,25,20))
self.lineEdit.setObjectName("lineEdit")

self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(55,20,155,21))
self.pushButton.setObjectName("pushButton")
mainWindow.setCentralWidget(self.centralwidget)

self.retranslateUi(mainWindow)
self.kontrol = kontrol(self)
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.kontrol.et)
QtCore.QMetaObject.connectSlotsByName(mainWindow)

def retranslateUi(self, mainWindow):
mainWindow.setWindowTitle(QtGui.QApplication.translate("mainWindow", "Sayı Bul", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("mainWindow", "0 - 100 arası bir sayı giriniz.", None, QtGui.QApplication.UnicodeUTF8))
self.lineEdit.setInputMask(QtGui.QApplication.translate("mainWindow", "99; ", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("mainWindow", "Gir", None, QtGui.QApplication.UnicodeUTF8))

app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
ui = Ui_mainWindow()
ui.setupUi(window)
tut = random.randrange(0, 100)
dene = 0

window.show()
sys.exit(app.exec_())



Bu Kategorideki Yazlar:

< Net Send Panel || 1161 Adet .DLLl Dosyasýnýn Açýklamasý >





Bu yazya yorum yaplmam.
 

Güvenlik (3)
Lagara Lugara (15)
Pardus (2)
Programlama (13)
Sokak Yarýþlarý (2)


Rapid Roll Extra (5904)
MySQL, Delphi ve Zeos Bileþenleri (3242)
FARK EDÝLMEYEN EFSANE DÝL “OBJECT PASCAL” (2829)
Rubik (Zeka) Küpü (2697)
1161 Adet .DLLl Dosyasýnýn Açýklamasý (2616)
Virus sildim makinamdan! (2505)
Sokak Yarýþlarý Projesi 0.3 (2420)
Cepte Blog (2314)
Doðum Günüm (2257)
IBM developerWorks (2241)



Diðer yarým...
Free Pascal Lazarus Project
Pardus
RSS Desteði



Pardus... Özgürlük Ýçin...

powered by Hasta Blog v2

Sayý Bul  Net Send Panel  Bayrak - ATA  Kara Kurdele  Rapid Roll Extra  Balik Adam