İlk önce en basit uygulama :
önce uygulama tanımlanıyor, sonra frame ile pencere tanımölanıyor. Sonrada frame görünür yapılıp, uygulama başlatılıyor.
Şimdi yazdığımız uygulamanın boyutunu ayarlayan satırlar. Bu sefer biraz daha yapısal bir uygulama yazılımı gösteriyoruz :
Önce yukarıda Deneme adında yeni bir sınıfı Frame sınıfından üretip özelliklerinde boyutunu 250x200 pixel olarak ayarlıyoruz, sonra aşağıda uygulamayı çalıştırmaya yönelik kodları koyuyoruz. Bu aşağıdaki kısımda değişiklik yapmadan açılan pencere içeriğini yukarda sınıf tanımında yapmayı planlıyoruz.
Şimdi de ekranı ortalayalım :
İlk Menümüzü kullanalım bakalım :
Önce bir MenuBar tanımlıyoruz ki bu menünün tamamını oluşturur. İkinci olarak bir menü tanımlıyoruz, bu da menüde pencerede görünen menü başlıklarıdır. Son olarak menü içine eklenecek bir item tanımlıyoruz. wx.ID_EXIT ile standart uygulama çıkış menüsü item olarak ekleniyor. Menübar'a "Dosya" menüsü eklendikten sonra uygulamamıza işte bu senin menübar'ın diye gösteriyoruz.
Bind komutu ile tanımladığımız menü item tıklama olayını OnQuit metoduna bağlıyoruz. OnQuit metodu tanımlamasına da Close() yazarak uygulamadan çıkılmasını sağlıyoruz. Gerisi bildiğiniz şeyler :
Ne fark var? bir wx.MenuItem tanımlıyoruz "k" harfine veya Ctrl+Q tuşlamasıyla da bu menü aktivasyonunun çalıştırılabileceği yönünde kısayol tanımları yapıyoruz. Bu hareketler bildiğiniz gibi tüm pencereli programlarda kullandığınız şeyler. Menüye bir de resim tanımlıyoruz. Bu esimleri nerde bulurum derseniz , linux kullananlar "/usr/share/" klasörü içinde "exit.png" aratırsanız diğer uygulamaların kullandığı ikonlardan bulabilirsiniz.findicons.com da bir sürü ikon var mesela böyle internetten de bulunabilir. Daha sonra Bind ile bu menüye "id" si üzerinden OnQuit metodunu bağlıyoruz.
Burada APP_EXIT ismi verilen bir sabit tanımlanmış ve onu kullanarak "id" üzerinden bağlantının nasıl yapıldığı gösterilmiştir. Burada APP_EXIT yerine isterseniz temsil ettiği "1" sayısını da kullanabilirsiniz, bu programın çalışmasını değiştirmez. Burada amaç hem size "id" üzerinden bağlantının nasıl kurulduğunu göstermek, aynı zamanda ilerde bissürü menü elemanınız olunca her birine ayrı numaraları verirken karıştırmamak için tüm "id" numaralandırmalarını programın bir noktasında toplamak.
Şunu unutmayın iş yapan bir uygulama yazmaya kalktığınızda bazen binlerce satır kod yazarsınız , burda kodun içinde kaybolmamak için bu şekil amacı belirten değişken isimleri ile çalışmak çok önemlidir. Değişkenlerin adı ne kadar uzun olursa olsun açıklayıcı olsun, nasıl olsa editörler iki-üç harf yazınca size önceden yazdığınız kelimeleri hatırlatmaya başlıyor.
Oh oh herşey var, statusbar nasıl tanımlanır, toolbar nasıl tanımlanır, check menü elemanları.. Bir önemli ve kritik nokta daha var, bisürü "self" kelimesi neden? InitUi metodu içinde tanımladığımız elemanların özelliklerini diğer metodların içinde değiştirmek istiyoruz, o zaman bu elemanlara metod dışından erişilebilmesi için bunları sınıfa ait değişkenler olarak herbirinin başına "self" kelimesi koyarak tanımlıyoruz. Daha önce de aynı şekilde dışarıda tanımlanmış metodları çağırıyorduk hatırlarsanız.
CreateToolBar ile uygulamanın toolbar'ını tanımlıyoruz, ardından AddLabelTool ile çıkış simgesini toolbarımıza ekliyoruz. En son Realize komutuyla toolbar'ı ekranda gerçekleştiriyoruz.
Gördüğünüz gibi dışarıdaki metodlardan içerdeki tollbar'a müdahale ettiğimiz için yine bi sürü self kelimesi.
# -*- coding: utf-8 -*- import wx app = wx.App() frame = wx.Frame(None, -1, "BASİT") frame.Show() app.MainLoop()
önce uygulama tanımlanıyor, sonra frame ile pencere tanımölanıyor. Sonrada frame görünür yapılıp, uygulama başlatılıyor.
Şimdi yazdığımız uygulamanın boyutunu ayarlayan satırlar. Bu sefer biraz daha yapısal bir uygulama yazılımı gösteriyoruz :
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, parent, title): super(Deneme, self).__init__(parent, title=title, size=(250, 200)) self.Show() if __name__ == "__main__" : app = wx.App() Deneme(None, title="Size") app.MainLoop()
Önce yukarıda Deneme adında yeni bir sınıfı Frame sınıfından üretip özelliklerinde boyutunu 250x200 pixel olarak ayarlıyoruz, sonra aşağıda uygulamayı çalıştırmaya yönelik kodları koyuyoruz. Bu aşağıdaki kısımda değişiklik yapmadan açılan pencere içeriğini yukarda sınıf tanımında yapmayı planlıyoruz.
Şimdi de ekranı ortalayalım :
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, parent, title): super(Deneme, self).__init__(parent, title=title, size=(300, 200)) self.Centre() self.Show() if __name__ == "__main__" : app = wx.App() Deneme(None, title="Merkezde") app.MainLoop()
İlk Menümüzü kullanalım bakalım :
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): menubar = wx.MenuBar() filemenu = wx.Menu() fitem = filemenu.Append(wx.ID_EXIT, "Çık", "Uygulamadan Çık") menubar.Append(filemenu, "&Dosya") self.SetMenuBar(menubar) self.Bind(wx.EVT_MENU, self.OnQuit, fitem) self.SetSize((300,200)) self.SetTitle('Basit Menü') self.Centre() self.Show() def OnQuit(self, e): self.Close() if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Önce bir MenuBar tanımlıyoruz ki bu menünün tamamını oluşturur. İkinci olarak bir menü tanımlıyoruz, bu da menüde pencerede görünen menü başlıklarıdır. Son olarak menü içine eklenecek bir item tanımlıyoruz. wx.ID_EXIT ile standart uygulama çıkış menüsü item olarak ekleniyor. Menübar'a "Dosya" menüsü eklendikten sonra uygulamamıza işte bu senin menübar'ın diye gösteriyoruz.
Bind komutu ile tanımladığımız menü item tıklama olayını OnQuit metoduna bağlıyoruz. OnQuit metodu tanımlamasına da Close() yazarak uygulamadan çıkılmasını sağlıyoruz. Gerisi bildiğiniz şeyler :
İkonlar ve Kısayollar
# -*- coding: utf-8 -*- import wx APP_EXIT = 1 class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): menubar = wx.MenuBar() filemenu = wx.Menu() qmi = wx.MenuItem(filemenu, APP_EXIT, "Çı&k\tCtrl+Q") qmi.SetBitmap(wx.Bitmap('images/exit.png')) filemenu.AppendItem(qmi) self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT) menubar.Append(filemenu, '&Dosya') self.SetMenuBar(menubar) self.SetSize((300,200)) self.SetTitle('İkonlar Kısayollar') self.Centre() self.Show() def OnQuit(self, e): self.Close() if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Ne fark var? bir wx.MenuItem tanımlıyoruz "k" harfine veya Ctrl+Q tuşlamasıyla da bu menü aktivasyonunun çalıştırılabileceği yönünde kısayol tanımları yapıyoruz. Bu hareketler bildiğiniz gibi tüm pencereli programlarda kullandığınız şeyler. Menüye bir de resim tanımlıyoruz. Bu esimleri nerde bulurum derseniz , linux kullananlar "/usr/share/" klasörü içinde "exit.png" aratırsanız diğer uygulamaların kullandığı ikonlardan bulabilirsiniz.findicons.com da bir sürü ikon var mesela böyle internetten de bulunabilir. Daha sonra Bind ile bu menüye "id" si üzerinden OnQuit metodunu bağlıyoruz.
Burada APP_EXIT ismi verilen bir sabit tanımlanmış ve onu kullanarak "id" üzerinden bağlantının nasıl yapıldığı gösterilmiştir. Burada APP_EXIT yerine isterseniz temsil ettiği "1" sayısını da kullanabilirsiniz, bu programın çalışmasını değiştirmez. Burada amaç hem size "id" üzerinden bağlantının nasıl kurulduğunu göstermek, aynı zamanda ilerde bissürü menü elemanınız olunca her birine ayrı numaraları verirken karıştırmamak için tüm "id" numaralandırmalarını programın bir noktasında toplamak.
Şunu unutmayın iş yapan bir uygulama yazmaya kalktığınızda bazen binlerce satır kod yazarsınız , burda kodun içinde kaybolmamak için bu şekil amacı belirten değişken isimleri ile çalışmak çok önemlidir. Değişkenlerin adı ne kadar uzun olursa olsun açıklayıcı olsun, nasıl olsa editörler iki-üç harf yazınca size önceden yazdığınız kelimeleri hatırlatmaya başlıyor.
Altmenüler ve Separatörler
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): menubar = wx.MenuBar() filemenu = wx.Menu() filemenu.Append(wx.ID_NEW, '&Yeni') filemenu.Append(wx.ID_OPEN, '&Aç') filemenu.Append(wx.ID_SAVE, '&Kaydet') filemenu.AppendSeparator() imp = wx.Menu() imp.Append(wx.ID_ANY, 'Newsfeed listesi al...') imp.Append(wx.ID_ANY, 'Bookmark al...') imp.Append(wx.ID_ANY, 'Mail al...') filemenu.AppendMenu(wx.ID_ANY, 'İçeri A&l', imp) qmi = wx.MenuItem(filemenu, wx.ID_EXIT, "Çı&k\tCtrl+Q") filemenu.AppendItem(qmi) self.Bind(wx.EVT_MENU, self.OnQuit, qmi) menubar.Append(filemenu, '&Dosya') self.SetMenuBar(menubar) self.SetSize((300,200)) self.SetTitle('Alt Menü') self.Centre() self.Show() def OnQuit(self, e): self.Close() if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Bu uygulamada xwWidgets'in orjinal tanımlı menüleri ve ikonları kullanılmıştır. Bir listesi için tıklayın. Gördüğünüz gibi alt menü yapmak için yeni bir menü tanımlanıyor be bu menü sanki bir menü item gibi üst menüye ekleniyor. Bir de yeni olarak AddSeparator() komutu ile menüye bir grup ayırıcı yatay separatör konuyor.
Check Menü Elemanı
Üç çeşit menü elemanı vardır :- Normal eleman
- Check Eleman
- Radio eleman
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): menubar = wx.MenuBar() filemenu = wx.Menu() viewmenu = wx.Menu() self.shst = viewmenu.Append(wx.ID_ANY, 'Statusbar Göster', kind=wx.ITEM_CHECK) self.shtl = viewmenu.Append(wx.ID_ANY, 'Toolbar Göster', kind=wx.ITEM_CHECK) viewmenu.Check(self.shst.GetId(), True) viewmenu.Check(self.shtl.GetId(), True) self.Bind(wx.EVT_MENU, self.ToggleStatusBar, self.shst) self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl) menubar.Append(filemenu, '&Dosya') menubar.Append(viewmenu, '&Görüntü') self.SetMenuBar(menubar) self.toolbar = self.CreateToolBar() self.toolbar.AddLabelTool(1, '', wx.Bitmap('images/exit.png')) self.toolbar.Realize() self.statusbar = self.CreateStatusBar() self.statusbar.SetStatusText('Hazır') self.SetSize((300,200)) self.SetTitle('Check Menü Elemanı') self.Centre() self.Show() def ToggleStatusBar(self, e): if self.shst.IsChecked(): self.statusbar.Show() else: self.statusbar.Hide() def ToggleToolBar(self, e): if self.shtl.IsChecked(): self.toolbar.Show() else: self.toolbar.Hide() if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Oh oh herşey var, statusbar nasıl tanımlanır, toolbar nasıl tanımlanır, check menü elemanları.. Bir önemli ve kritik nokta daha var, bisürü "self" kelimesi neden? InitUi metodu içinde tanımladığımız elemanların özelliklerini diğer metodların içinde değiştirmek istiyoruz, o zaman bu elemanlara metod dışından erişilebilmesi için bunları sınıfa ait değişkenler olarak herbirinin başına "self" kelimesi koyarak tanımlıyoruz. Daha önce de aynı şekilde dışarıda tanımlanmış metodları çağırıyorduk hatırlarsanız.
Context Menü
Context menü sağ tuş tıklayınca çıkan menülere verilen addır:
# -*- coding: utf-8 -*- import wx class BenimPopupMenu(wx.Menu): def __init__(self, parent): super(BenimPopupMenu, self).__init__() self.parent = parent mmi = wx.MenuItem(self, wx.NewId(), 'Küçült') self.AppendItem(mmi) self.Bind(wx.EVT_MENU, self.OnMinimize, mmi) cmi = wx.MenuItem(self, wx.NewId(), 'Kapat') self.AppendItem(cmi) self.Bind(wx.EVT_MENU, self.OnClose, cmi) def OnMinimize(self, e): self.parent.Iconize() def OnClose(self, e): self.parent.Close() class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) self.SetSize((250,200)) self.SetTitle('Context Menü') self.Centre() self.Show() def OnRightDown(self, e): self.PopupMenu(BenimPopupMenu(self), e.GetPosition()) if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Toolbar
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): toolbar = self.CreateToolBar() qtool = toolbar.AddLabelTool(wx.ID_ANY, 'Çıkış', wx.Bitmap('images/exit.png')) toolbar.Realize() self.Bind(wx.EVT_TOOL, self.OnQuit, qtool) self.SetSize((250,200)) self.SetTitle('Basit Toolbar') self.Centre() self.Show() def OnQuit(self, e): self.Close() if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
CreateToolBar ile uygulamanın toolbar'ını tanımlıyoruz, ardından AddLabelTool ile çıkış simgesini toolbarımıza ekliyoruz. En son Realize komutuyla toolbar'ı ekranda gerçekleştiriyoruz.
Enable , disable
Toolbar objelerinin tıklanmasına izin vermek ya da vermemek.
# -*- coding: utf-8 -*- import wx class Deneme(wx.Frame): def __init__(self, *args, **kwargs): super(Deneme, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): self.count = 5 self.toolbar = self.CreateToolBar() tundo = self.toolbar.AddLabelTool(wx.ID_UNDO,'',wx.Bitmap('images/undo.png')) tredo = self.toolbar.AddLabelTool(wx.ID_REDO,'',wx.Bitmap('images/redo.png')) self.toolbar.EnableTool(wx.ID_REDO,False) self.toolbar.AddSeparator() texit = self.toolbar.AddLabelTool(wx.ID_EXIT,'',wx.Bitmap('images/exit.png')) self.toolbar.Realize() self.Bind(wx.EVT_TOOL, self.OnQuit, texit) self.Bind(wx.EVT_TOOL, self.OnUndo, tundo) self.Bind(wx.EVT_TOOL, self.OnRedo, tredo) self.SetSize((250,200)) self.SetTitle('Enable Disable') self.Centre() self.Show() def OnQuit(self, e): self.Close() def OnUndo(self, e): if self.count > 1 and self.count <= 5: self.count = self.count - 1 if self.count == 1: self.toolbar.EnableTool(wx.ID_UNDO,False) if self.count == 4: self.toolbar.EnableTool(wx.ID_REDO,True) def OnRedo(self,e): if self.count < 5 and self.count >= 1: self.count = self.count + 1 if self.count == 5: self.toolbar.EnableTool(wx.ID_REDO,False) if self.count == 2: self.toolbar.EnableTool(wx.ID_UNDO,True) if __name__ == "__main__" : app = wx.App() Deneme(None) app.MainLoop()
Gördüğünüz gibi dışarıdaki metodlardan içerdeki tollbar'a müdahale ettiğimiz için yine bi sürü self kelimesi.
Hiç yorum yok:
Yorum Gönder