Yeni text editörümüz “Yazgaç”
# -*- coding: cp1254 -*-
# Türkçe karakterlerin düzgün görünmesi için dil kodlaması belirledik
# Böyle bir belirleme yapmazsak varsayılan olarak türkçe karakterler görünmeyecektir.
"""
Programı yazan: Aydın ŞEN
Tarih: 9.11.2007
Kullanılan dil: Python
Kullanılan kütüphane: wxPython
Açıklamalı anlatım: www.pythonturk.com
Kullanılan lisans: GPL (General Public License - Genel Kamu Lisansı)
** GPL şartları dahilinde kullanımı serbesttir.
"""
import wx
import os
import sys
# Programda nesnelere daha sonra tekrar ulaşabilmek için oluştururken ID vereceğiz
ID_YENI=0
ID_AC=1
ID_KAYDET=2
ID_FKAYDET=3
ID_CIK=4
ID_GERI=5
ID_KES=6
ID_KOPYALA=7
ID_YAPISTIR=8
ID_SIL=9
ID_HSEC=10
ID_YTIPI=11
ID_HAKKINDA=12
class Yazgac(wx.Frame):
def __init__(self,*args,**kwargs):
wx.Frame.__init__(self,*args,**kwargs)
self.timer=wx.Timer(self,-1)
self.timer.Start(100)
wx.EVT_TIMER(self,self.timer.GetId(),self.ontimer)
# Penceremize "yazgac.ico" adındaki icon dosyamızı yerleştirdik.
self.SetIcon(wx.Icon(’yazgac.ico’, wx.BITMAP_TYPE_ICO))
# Pencerenin kapanma olayını cik metodumuza bağladık, pencere kapatıldığında cik metodundaki komutlar işletilecektir.
self.Bind(wx.EVT_CLOSE,self.cik)
# Penceremizin "title"-başlığına atamak için değişken oluşturduk.
self.baslik="-Yazgaç"
# Metin gireceğimiz alanı oluşturduk.
# Aldığı parametreler self=pencereye ait olduğunu, wx.ID_ANY değeri -1′dir,
# nesneye metinAlani adından ulaşabileceğimiz için belirli bir ID vermemize gerek yok.
# style değeri ile çok satır girebileceğimizi belirttik
self.metinAlani=wx.TextCtrl(self,wx.ID_ANY,style=wx.TE_MULTILINE)
# metinAlaninın EVT_KEY_UP (herhangi bir tuşa basıp elimizi çekmemiz) olayını tanımladık.
# Bu olay gerçekleştiğinde onPress metodunu çağırdık
self.metinAlani.Bind(wx.EVT_KEY_UP,self.onPress)
# metinAlanina yazı tipi,boyutu ataması yaptık.
font = wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, u’Times New Roman’)
self.metinAlani.SetFont(font)
# Dikey bir Sizer tanımladık, nesneleri onun üzerine yerleştireceğiz.
vbox = wx.BoxSizer(wx.VERTICAL)
# MenuBar oluşturk ve yerkeştirdik.
self.menuBar=wx.MenuBar()
self.SetMenuBar(self.menuBar)
# toolbar adında bir ToolBar nesnesi oluşturduk
self.toolbar = wx.ToolBar(self, wx.ID_ANY,size=wx.Size(1300,24),style=wx.TB_HORIZONTAL | wx.NO_BORDER |wx.TB_FLAT)
# toolbar üzerine butonlar ekliyoruz.
# Bu butonlara daha sonra metod atayabilmek için yukarıda atadığımız ID’leri atıyoruz.
# Bu ID’ler üzerinden olay ataması yapacağız.
# Programla aynı klasörde bulunan "icons/" klasörü içerisindeki resimleri atadık.
self.toolbar.AddSimpleTool(ID_YENI,wx.Bitmap(’icons/yeni.png’),’Yeni’,”)
self.toolbar.AddSimpleTool(ID_AC,wx.Bitmap(’icons/ac.png’),’Aç’,”)
self.toolbar.AddSimpleTool(ID_KAYDET,wx.Bitmap(’icons/kaydet.png’),’Kaydet’,”)
self.toolbar.AddSimpleTool(ID_FKAYDET,wx.Bitmap(’icons/fkaydet.png’),’Farklı Kaydet’,”)
self.toolbar.AddSeparator()
self.toolbar.AddSimpleTool(ID_KES,wx.Bitmap(’icons/kes.png’),’Kes’,”)
self.toolbar.AddSimpleTool(ID_KOPYALA,wx.Bitmap(’icons/kopyala.png’),’Kopyala’,”)
self.toolbar.AddSimpleTool(ID_YAPISTIR,wx.Bitmap(’icons/yapistir.png’),’Yapıştır’,”)
self.toolbar.AddSimpleTool(ID_SIL,wx.Bitmap(’icons/sil.png’),’Sil’,”)
self.toolbar.AddSimpleTool(ID_YTIPI,wx.Bitmap(’icons/yaziTipi.png’),’Yazı Tipi’,”)
self.toolbar.AddSimpleTool(ID_GERI,wx.Bitmap(’icons/geri.png’),’Geri’,”)
# Geri butonunun sayfa ilk yüklendiğinde bir işlevi olmadığı için
# Pasif yaptık, daha sonra gerekli yerlerde "False" değerini "True" yaparak aktifleştireceğiz.
self.toolbar.EnableTool(ID_GERI,False)
# ToolBar’a eleman eklediğimizde yerleşmesi için Realize metodunu çağırıyoruz.
# Bir nevi reload yada pack işlevi görüyor.
self.toolbar.Realize()
# Yukarıda verdiğimiz ID’leri kullanarak gerekli metodlara yönlendiriyoruz.
# Mesela ilk satır ID’si ID_YENI olan butona tıklandığında yeni metodunu çağıran koddur.
self.toolbar.Bind(wx.EVT_TOOL, self.yeni, id=ID_YENI)
self.toolbar.Bind(wx.EVT_TOOL, self.ac, id=ID_AC)
self.toolbar.Bind(wx.EVT_TOOL, self.kaydet, id=ID_KAYDET)
self.toolbar.Bind(wx.EVT_TOOL, self.farkliKaydet, id=ID_FKAYDET)
self.toolbar.Bind(wx.EVT_TOOL, self.kopyala, id=ID_KOPYALA)
self.toolbar.Bind(wx.EVT_TOOL, self.kes, id=ID_KES)
self.toolbar.Bind(wx.EVT_TOOL, self.sil, id=ID_SIL)
self.toolbar.Bind(wx.EVT_TOOL, self.yapistir, id=ID_YAPISTIR)
self.toolbar.Bind(wx.EVT_TOOL, self.yaziTipi, id=ID_YTIPI)
self.toolbar.Bind(wx.EVT_TOOL, self.geriAl, id=ID_GERI)
# toolbar’ı Sizer’a ekledik
vbox.Add(self.toolbar)
# metinAlani’ni Sizer’a ekledik. wx.EXPAND pencereyi kaplamasını sağlar.
vbox.Add(self.metinAlani, 1, wx.EXPAND)
# Pencerenin Sizer’ının bizim oluşturduğumuz vbox olduğunu belirttik.
# Yani pencereye vbox üzerinden ulaşıyoruz.
self.SetSizer(vbox)
# Burada menü oluşturma, menü elemanlarına olay atama gibi işlemler yapılmıştır.
# Bu işlemleri kolaylaştırmak için menuYap isimli bir metod yazdım.
# menuYap metodunu ve buradan metoda gönderdiğim aşağıdaki parametreleri sitede anlatacağım.
# Dosya menu parametreleri
dosyaMenu=["Yeni\tCTRL+N","Aç\tCTRL+O","Kaydet\tCTRL+S","Farklı Kaydet","sep","Çık"]
dosyaFonksiyon=[self.yeni,self.ac,self.kaydet,self.farkliKaydet,self.cik]
dosyaID=[ID_YENI,ID_AC,ID_KAYDET,ID_FKAYDET,ID_CIK]
self.menuYap("&Dosya",dosyaMenu,dosyaFonksiyon,dosyaID)
# Düzen menu parametreleri
duzenMenu=["Geri Al\tCTRL+U","sep","Kes\tCTRL+X","Kopyala\tCTRL+C","Yapıştır\tCTRL+V","Sil\tDel","sep","Hepsini seç\tCTRL+A"]
duzenFonksiyon=[self.geriAl,self.kes,self.kopyala,self.yapistir,self.sil,self.hepsiniSec]
duzenID=[ID_GERI,ID_KES,ID_KOPYALA,ID_YAPISTIR,ID_SIL,ID_HSEC]
self.menuYap("D&üzen",duzenMenu,duzenFonksiyon,duzenID)
# Biçim menu parametreleri
bicimMenu=["Yazı tipi"]
bicimFonksiyon=[self.yaziTipi]
bicimID=[ID_YTIPI]
self.menuYap("&Biçim",bicimMenu,bicimFonksiyon,bicimID)
# Yardım menu parametreleri
yardimMenu=["Yazgaç hakkında"]
yardimFonksiyon=[self.hakkinda]
yardimID=[ID_HAKKINDA]
self.menuYap("&Yardım",yardimMenu,yardimFonksiyon,yardimID)
# Düzen menüsündeki Geri Al menü elemanını pasif yaptık.
# Program ilk başladığında geri alacak bir şey olmadığı için.
self.menuBar.Enable(ID_GERI,False)
# Centre metodu programı çalıştırdığınızda pencerenin ekranı ortalamasını sağlar.
self.Centre()
# Show metodunu kullanarak pencereyi gösteriyoruz. True yazmasak da olurdu, varsayılan değeri True’dur.
self.Show(True)
# dosyaAdi’ni dosya açma,kaydetme işlemlerinde kullanacağız.
# Başlangıçta ve yeni dosya açıldığında dosyaAdimiz "İsimsiz" olacak
self.dosyaAdi="İsimsiz"
# patika değişkenimizi de dosya kaydederken kullanacağız
self.patika=""
# degisti değerini açtığımız dosyada herhangi bir değişiklik yapılmış mı kontrol etmek için kullanacağız
# Program başlarken bir değişme söz konusu olmadığı için False atıyoruz.
self.degisti=False
#######################################################################################################
def ontimer(self,evt):
ilk,son=self.metinAlani.GetSelection()
if ilk==son:
self.menuBar.Enable(ID_SIL,False)
self.menuBar.Enable(ID_KES,False)
self.menuBar.Enable(ID_KOPYALA,False)
self.toolbar.EnableTool(ID_SIL,False)
self.toolbar.EnableTool(ID_KES,False)
self.toolbar.EnableTool(ID_KOPYALA,False)
else:
self.menuBar.Enable(ID_YAPISTIR,True)
self.menuBar.Enable(ID_SIL,True)
self.menuBar.Enable(ID_KES,True)
self.menuBar.Enable(ID_KOPYALA,True)
self.toolbar.EnableTool(ID_YAPISTIR,True)
self.toolbar.EnableTool(ID_SIL,True)
self.toolbar.EnableTool(ID_KES,True)
self.toolbar.EnableTool(ID_KOPYALA,True)
if self.metinAlani.CanPaste():
self.toolbar.EnableTool(ID_YAPISTIR,True)
self.menuBar.Enable(ID_YAPISTIR,True)
else:
self.toolbar.EnableTool(ID_YAPISTIR,False)
self.menuBar.Enable(ID_YAPISTIR,False)
#######################################################################################################
def menuYap(self,menuAdi,menuParam,fParam,idParam):
menu=wx.Menu()
sayac=0
for i in menuParam:
if i=="sep":
menu.AppendSeparator()
continue
else:
item=menu.Append(idParam[sayac],i,kind=wx.ITEM_NORMAL)
self.Bind(wx.EVT_MENU,fParam[sayac],item)
sayac=sayac+1
self.menuBar.Append(menu,menuAdi)
#######################################################################################################
def yeni(self,evt):
# degisti değerimizi kontrol ediyoruz, True ise yani değişim olmuş ise kullanıcıyı yeni dosya açmadan
# önce kaydetmesi için uyarıyoruz
if self.degisti==True:
dlg=wx.MessageDialog(self,"%s dosyası değiştirildi. Değişiklikleri kaydetmek istermisiniz?"%(self.dosyaAdi),caption="Yazgaç",
style=wx.YES_NO|wx.CANCEL|wx.ICON_EXCLAMATION)
deger=dlg.ShowModal()
# Değişikleri kaydetmek istermisiniz sorusuna iptal dediyse hiçbirşey yapmıyoruz.
if deger==wx.ID_CANCEL:
return None
# Evet dediyse kaydet metoduna yönlendiriyoruz.
if deger==wx.ID_YES:
self.kaydet(evt)
# Bu kısım iki durumda çalışacak;
# Birinci durum kullanıcı "Hayır" kaydetmek istemiyorum dediğinde,
# ikinci durum ise kullanıcı "Evet" deyip kaydet metodunda değişiklikleri kaydedip geldiğinde
# Dikkat ederseniz ilk şartta degisti değerimiz "True" idi. Kaydet metodun da ise degisti değerine "False"
# değeri atıyoruz ve değişiklik olayını sıfırlıyoruz. Kullanıcı değişiklikleri kaydettikten sonra
# kaldığı yerden "Yeni dosya açma işlemi" ne devam ediyor.
if (deger==wx.ID_NO)|(self.degisti==False):
# metinAlanimizi temizliyoruz.
self.metinAlani.Clear()
# dosyaAdimizi tekrar "İsimsiz" yapıyoruz.
self.dosyaAdi="İsimsiz"
# Pencerenin başlığına dosyaAdimizi ve baslık değişkenimizi(değeri "- Yazgaç") atıyoruz.
self.SetTitle(self.dosyaAdi+self.baslik)
# degisti değerini False yapıyoruz, kullanıcı kaydedip buraya gelmiş olabilir, o durumda degisti değeri False’tur zaten
# ancak kullanıcı kaydetmek istiyormusunuz "Hayır" demiş olabilir, bu durumda degisti değeri hala True’dur
# o yüzden burada tekrar False değerini atıyoruz.
self.degisti=False
# Eğer hiçbir değişiklik yoksa direk sayfayı temizleyip yeni bir sayfa oluşturuyoruz.
else:
self.metinAlani.Clear()
self.dosyaAdi="İsimsiz"
self.SetTitle(self.dosyaAdi+self.baslik)
# Kod buraya ulaştığında yeni bir dosya oluşturmuş oluyoruz.
# O yüzden toolbardaki geri butonunu ve menü elemanını pasif yapıyoruz
self.toolbar.EnableTool(ID_GERI,False)
self.menuBar.Enable(ID_GERI,False)
#######################################################################################################
def ac(self,evt):
# O anki açık olan dosyada bir değişiklik olup olmadığını kontrol ediyoruz.
if self.degisti==True:
# Değişiklik varsa bir dialog penceresi aracılığı ile bu değişiklikleri kaydetmek isteyip istemediğini soruyoruz.
# "%s"%(self.dosyaAdi) tırnak işaretleri arasında %s ile belirtilen yerde dosyaAdi değişkenindeki değerin yazmasını sağlıyor.
dlg=wx.MessageDialog(self,"%s dosyası değiştirildi. Değişiklikleri kaydetmek istermisiniz?"%(self.dosyaAdi),caption="Yazgaç",style=wx.YES_NO|wx.CANCEL|wx.ICON_EXCLAMATION)
deger=dlg.ShowModal()
# Bu kısım yeni metodunda anlatılmıştır.
if deger==wx.ID_CANCEL:
return None
if deger==wx.ID_YES:
self.kaydet(self)
if (deger==wx.ID_NO)|(self.degisti==False):
dlg=wx.FileDialog(self,"Aç",self.dosyaAdi,"","*.*",wx.OPEN)
if dlg.ShowModal()==wx.ID_OK:
# patika değişkenine açacağımız dosyanın yolunu, dosyaAdi değişkenine ise adını atıyoruz.
self.dosyaAdi=dlg.GetFilename()
self.patika=dlg.GetDirectory()
# Dosya açma işlemini herhangi bir hata oluşumuna karşı try-except bloğu arasında gerçekleştiriyoruz.
try:
# Dosyayı "r+" modunda açıyoruz, bunun anlamı hem okuyabilir hem yazabiliriz dosyaya.
dosya=open(os.path.join(self.patika,self.dosyaAdi),’r+’)
# Açtığımız dosyadan read() metoduyla verileri okuyoruz.
# read metodu içerisinde dosyadaki tüm verileri bulunduran String bir değişken döndürür.
# Daha sonra dönen String’i SetValue metoduyla metinAlanina yazıyoruz.
self.metinAlani.SetValue(dosya.read())
# Dosyamızı kapatıyoruz.
dosya.close()
# Not: dosya açma işlemini "self.metinAlani.LoadFile(self.dosyaAdi)" koduyla da yapabilirdik.
# Ancak bulunduğunuz konumdan farklı bir konumda dosya açtığınız zaman hata veriyor
# o yüzden bu yöntemle dosyamızı yükledik.
except Exception, inst:
# Bu blokta bir hata oluştuğunda hatayı yakalıyoruz.
# Hatanın ne olduğu "inst" adındaki nesneye bağlanıyor (başka bir isimde kullanabilirdik).
# Dönen bir nesnedir. MessageDialog’da yazdırabilmemiz için str() metoduyla String’e dönüştürüyoruz.
dlg=wx.MessageDialog(self,"Hata: "+str(inst),style=wx.OK)
dlg.ShowModal()
raise
self.SetTitle(self.dosyaAdi+self.baslik)
self.degisti=False
# MessageDialog penceremizi yok ediyoruz.
dlg.Destroy()
# Dosyada değişiklik yoksa direk dosya açma işlemine geçilir.
else:
dlg=wx.FileDialog(self,"Aç",self.dosyaAdi,"","*.*",wx.OPEN)
deger=dlg.ShowModal()
if deger==wx.ID_OK:
self.dosyaAdi=dlg.GetFilename()
self.patika=dlg.GetDirectory()
try:
dosya=open(os.path.join(self.patika,self.dosyaAdi),’r+’)
self.metinAlani.SetValue(dosya.read())
dosya.close()
except Exception, inst:
dlg=wx.MessageDialog(self,"Hata: "+str(inst),style=wx.OK)
dlg.ShowModal()
raise
self.SetTitle(self.dosyaAdi+self.baslik)
dlg.Destroy()
self.toolbar.EnableTool(ID_GERI,False)
self.menuBar.Enable(ID_GERI,False)
#####################################################################################################
def kaydet(self,evt):
# dosyaAdi=İsimsiz ise dosyanın yeni bir dosya olduğunu anlıyor ve farkliKaydet metoduna yönlendiriyoruz.
if self.dosyaAdi=="İsimsiz":
self.farkliKaydet(evt)
# dosyaAdi=İsimsiz değilse yani dosya halihazırda var olan bir dosya ise
# SaveFile metoduyla dosyayı kaydediyoruz.
else:
try:
self.metinAlani.SaveFile(self.dosyaAdi)
# Değişiklikleri kaydettiğimiz için degisti değişkenimiz False yapıyoruz.
self.degisti=False
except Exception, inst:
dlg=wx.MessageDialog(self,"Hata: "+str(inst),style=wx.OK)
dlg.ShowModal()
raise
#####################################################################################################
def farkliKaydet(self,evt):
dlg = wx.FileDialog(self, "Farkli Kaydet", self.dosyaAdi, ".txt", "*.*", \
wx.SAVE | wx.OVERWRITE_PROMPT)
deger=dlg.ShowModal()
if deger == wx.ID_OK:
try:
self.dosyaAdi=dlg.GetFilename()
self.patika=dlg.GetDirectory()
# metinAlanindaki verileri "veriler" isimli değişkene alıyoruz
veriler=self.metinAlani.GetValue()
# Seçtiğimiz konum ve dosya adında bir dosyayı yazma modunda açıyoruz
# Yazma modunda açmak demek dosyayı oluşturmak demektir
# O isimde dosya varsa üzerine yazılsın mı diye sorar
dosya=open(os.path.join(self.patika, self.dosyaAdi),’w')
dosya.write(veriler)
dosya.close()
self.SetTitle(self.dosyaAdi+self.baslik)
self.degisti=False
except Exception, inst:
dlg=wx.MessageDialog(self,"Hata:"+str(inst),style=wx.OK)
dlg.ShowModal()
raise
dlg.Destroy()
#######################################################################################################
def cik(self,evt):
# Kullanıcı pencereyi kapattığında veya Dosya menüsünden "Çık" menü elemanını tıkladığında bu metot çalışır.
# Eğer o anki dosyada değişiklik varsa kaydetmek isteyip istemediğini soruyoruz.
if self.degisti==True:
dlg=wx.MessageDialog(self,"%s dosyası değiştirildi. Değişiklikleri kaydetmek istermisiniz?"%(self.dosyaAdi),caption="Yazgaç",style=wx.YES_NO|wx.CANCEL|wx.ICON_EXCLAMATION)
deger=dlg.ShowModal()
# Kaydetmek istermisiniz sorusuna "İptal" derse hiçbirşey yapmıyoruz. degisti değerimiz hala True.
if deger==wx.ID_CANCEL:
return None
# "Evet" derse kaydet() metodunu çağırıyoruz ve kaydettikten sonra pencereyi yok ediyoruz.
if deger==wx.ID_YES:
dlg.Destroy()
self.kaydet(evt)
self.Destroy()
# "Hayır" derse hiçbir şey yapmadan pencereyi yok ediyoruz.
if deger==wx.ID_NO:
dlg.Destroy()
self.Destroy()
# Eğer degisti değer False ise direk pencereyi yok ediyoruz.
else:
self.Destroy()
#####################################################################################################
# Düzen menü fonksiyonları
def geriAl(self,evt):
# CanUndo metodu metinAlaninde bir değişiklik varsa yani geri alınabilirse True değeri döndürür.
# Geri alınacak bir değişiklik yapılmamışsa False değeri döner.
# Burada if bloğuna gerek olmadığı için eklemedik ama o blok aslında şöyledir:
# if selfömetinAlani.CanUndo()==True:
"""Not: Aslında bu if bloğuna gerek yok. Çünkü programın çeşitli yerlerinde Geri al butonunu ve menü elemanını kontrol ediyorum.
Geri alma işlemi gerçekleşebilecek durumda aktif, gerçekleşemeyecek durumda pasif yapıyorum.
Yani kullanıcı Geri Al butonuna veya menü elemanına tıkladığında metinde geri alınabilir bir işlem yapılmış demektir.
Metod içerisinde bunu tekrar kontrol etmeye gerek yoktu. Ancak o metodun da kullanımını göstermek için buraya ekledim.
"""
if self.metinAlani.CanUndo():
# Undo() metodu en son yaptığınız işlemi geri alır.
self.metinAlani.Undo()
# Geri alma işlemi gerçekleştiği için degisiklik oldu demektir.
# Bu yüzden degisti değerini True yapıyoruz.
self.degisti=True
###################################################################################################
def kes(self,evt):
# CanCut metoduyla metinAlaninda kesilebilecek bir veri olup olmadığını kontrol ediyoruz.
if self.metinAlani.CanCut():
self.metinAlani.Cut()
self.degisti=True
# metinAlanindaki verilerde değişme olduğu için geri al işlemi çalışabilir.
# O yüzden geri al buton ve menü elemanını aktif yapıyoruz.
self.toolbar.EnableTool(ID_GERI,True)
self.menuBar.Enable(ID_GERI,True)
###################################################################################################
def kopyala(self,evt):
# CanCopy metoduyla metinAlaninda kopyalanabilecek bir veri olup olmadığını kontrol ediyoruz.
if self.metinAlani.CanCopy():
self.metinAlani.Copy()
###################################################################################################
def yapistir(self,evt):
# CanPaste metoduyla metinAlaninda yapıştırılabilecek bir veri olup olmadığını kontrol ediyoruz.
if self.metinAlani.CanPaste():
self.metinAlani.Paste()
self.degisti=True
##################################################################################################
def sil(self,evt):
# GetSelection metodu seçtiğiniz verinin başlangıç ve bitiş indislerini içeren 2 değer döndürür.
# Burada başlangıç değerini "ilk", bitiş değerini ise "son" değişkenine atıyoruz.
ilk,son=self.metinAlani.GetSelection()
# Remove metoduyla da verdiğimiz indisler arasındaki veriyi siliyoruz.
self.metinAlani.Remove(ilk,son)
##################################################################################################
def hepsiniSec(self,evt):
# SelectAll metoduyla metinAlanindaki bütün verileri seçili hale getiriyoruz.
self.metinAlani.SelectAll()
##################################################################################################
# Biçim menü fonksiyonları
def yaziTipi(self,evt):
# dlg adında bir Fontdialog nesnesi oluşturuyoruz.
yaziTipi=wx.FontData()
dlg = wx.FontDialog(self,yaziTipi)
deger=dlg.ShowModal()
# FontDialog kutusunda "Tamam" butonuna tıklandığında gerekli değişiklikleri yapıyoruz.
if deger==wx.ID_OK:
# yaziTipi değişkenine dialog kutusundan dönen verileri aktarıyoruz.
yaziTipi = dlg.GetFontData()
font = yaziTipi.GetChosenFont()
# metinAlani’na seçtiğimiz font özelliklerini aktarıyoruz.
self.metinAlani.SetFont(font)
dlg.Destroy()
#################################################################################################
# Yardım menü fonksiyonları
def hakkinda(self,evt):
# Burada Hakkimda isimli oluşturduğumuz sınıftan "hakkinda" isimli bir nesne oluşturuyoruz.
hakkinda = Hakkimda(None,wx.ID_ANY, title="Yazgaç hakkında")
hakkinda.ShowModal()
hakkinda.Destroy()
#################################################################################################
def onPress(self,e):
# Programın başında EVT_KEY_UP olayına bu metodu bağlamıştık.
# Bir tuşa basılıp bırakıldığında bu metod çalışacak.
# Burada IsModified() metodu metinAlanindaki verilerde değişiklik yapabilecek bir tuşa basılıp basılmadığını kontrol ediyor.
# Kullanıcı CapsLock veya Ctrl gibi metinde değişikliğe neden olmayacak tuşlarada basmış olabilir.
# IsModified() metodu bu işi görüyor. Değişiklik varsa True yoksa False değeri döndürüyor.
if self.metinAlani.IsModified():
# Değişiklik olduğu için degisti değerimizi True yapıyoruz.
self.degisti=True
self.toolbar.EnableTool(ID_GERI,True)
self.menuBar.Enable(ID_GERI,True)
# Skip() metodu event’i geçiştiriyor. Yani tuşu bırakma eylemiyle buraya gelen event (olay) nesnesine işimizin bittiğini,
# Basılan tuşun kendi işlevini yerine getirebileceğini söylüyoruz.
# Event’i atlamazsak yani bu kodu yazmazsak metinAlanina herhangi bir karakter yazamayız, yani her tuş işlevsizdir.
# Sistem tuşların işlevlerinin burada belirtildiğini düşünüp buradaki işlemlerden başka bir işlem yapmaz.
e.Skip()
###############################################################################################
###############################################################################################
class Hakkimda(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size = (355, 450))
self.panel = wx.Panel(self, -1, pos=(0, 0), size=(355,450))
image_file = ‘icons/logo.bmp’
bmp = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
width = bmp.GetWidth()
height = bmp.GetHeight()
wx.StaticBitmap(self.panel, -1, bmp,pos=(18,5), size=(width, height))
self.yazi="Bu program,\n\n"\
"Aydın ŞEN tarafından\n\n"\
"wxPython kullanılarak\n\n"\
"geliştirilmiştir.\n\n"\
"Programın açıklamalı\n\n"\
"anlatımı için;\n\n"\
"bknz: www.pythonturk.com"
self.panel.SetBackgroundColour("White")
self.etiket = wx.StaticText(id=wx.ID_ANY, label=self.yazi, parent=self.panel, pos=(55, 120),size=(200,100),style=0)
font = wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD, False, u’Verdana’)
self.etiket.SetFont(font)
self.etiket.SetBackgroundColour("White")
vbox=wx.BoxSizer(wx.VERTICAL)
self.button = wx.Button(id=wx.ID_ANY, label=’Tamam’,
name=’button’, parent=self.panel, pos=wx.Point(150, 380), size=wx.Size(74, 26),style=0)
self.button.Bind(wx.EVT_BUTTON,self.basildi)
vbox.Add(self.panel,wx.EXPAND)
self.SetSizer(vbox)
self.Centre()
################################################################################
def basildi(self,evt):
self.Destroy()
#################################################################################
#################################################################################
class YazgacApp(wx.App):
def OnInit(self):
frame=Yazgac(None,wx.ID_ANY,size=(800,600),title="İsimsiz"+"-Yazgac")
frame.Show(True)
self.SetTopWindow(frame)
return True
#################################################################################
#################################################################################
#################################################################################
app=YazgacApp()
app.MainLoop()
Kasım 14th, 2007 at 06:33
Güzel paylaşımın için teşekkürler Aydın.
Kasım 15th, 2007 at 09:49
Teşekkürler Uğur, umarım ihtiyacı olan arkadaşlara faydalı olur.
Haziran 26th, 2008 at 10:43
uğur ben bir yapay zeka pragramı yapmak isti yorum bildiğim kadarıyla ben içine sözcükleri yükleyinde buna karşılık kelime veya harekaet yaptıra biliyoruz 1. sorum bunu nasıl yaparım detaylı anata bilir misiniz.2. sorum
Haziran 26th, 2008 at 23:25
soruyu biraz daha ayrınıtılı sorarsanız belki bir cevap veren bulunabilir
Haziran 30th, 2008 at 09:34
Bu bilgiler çok güzel. Sizi tebrik ediyorum. ÖZGÜRLÜKÇÜ olduğunuz için