Ez egy kisebb stílus bemutató a wxPythonhoz. Nem írja le egészében hogyan kell wxPython kódot írni, de leírja hogyan írhatunk tiszta kódot.
A Python stílus követi a pythonizmus elveit: pythonizmus
http://www.python.org/doc/humor/#the-zen-of-python
Ez a dokumentum leírja, hogyan használjuk a wxPython osztályokat és struktúrákat.
A wx importálásához, ne használd a import wx from * vagy a from wxPython.wx import * formát.
A mélyen eltemetett modulokhoz, használd ezt:
from wx.lib.ValamiLib.ValamiModul.AzOsztaly
Ha úgy gondolod, hogy egy konstruktorban túl sok felesleges paramétert adsz meg, például wx.DefaultSize, wx.DefaultPosition, wx.ID_ANY stb., használj kulcsparamétereket.
MainFrame = wx.Frame(None, title="Cím", size=(800, 600))
Használd a *args és a **kwargs paramétereket, amikor wx.Windows alosztályt hozol létre:
class MyPanel(wx.Panel): """Ez a panel néhány szokásos dologgal""" def __init__(self, *args, **kwargs): """Bemutató panel készítése""" wx.Panel.__init__(self, *args, **kwargs)
Ez lehetővé teszi, hogy az egyedi ablakok, ugyanazokat a paramétereket fogadják el mint az alap szabványos ablak. Így nem szükséges előre tudni, mi lehet hasznos.
Ne használj azonosítót, azaz ID-t.
MyFrame = wx.Frame(None, title="Cím", size=(400,400)) AButton = wx.Button(self, label="Nyomj meg")
Ha az id szükséges, használd a wx.ID_ANY-t. A wx.ID_ANY == -1. Természetesen használhatod a kódban a -1 formát is, de a wx.ID_ANY átláthatóbbá teszi a kódot.
Ki tudja, ez a varázslatos érték talán megváltozik egy nap. A wx.ID_ANY, mindenesetre öndokumentáló, leíró jellegű. Használj ilyen állandókat a programozás során.
Mindig van egy kivétel!
Példák
Az ilyen szabványos azonosítók listája wxWidgets referencia kézikönyv Constans – Stock items szakasztban találhatók.
Példa:
item = FileMenu.Append(wx.ID_EXIT, "&Quit")
Ez egy Quit menü, ahol meghívjuk a beépített kilépési függvényt.
Használd a Bind() metódust kötések létrehozásához:
AButton = wx.Button(self, label="Nyomj meg") AButton.Bind(wx.EVT_BUTTON, self.OnButtonPush)
Használhatod a Bind() függvényt a menükhöz is, még akkor is ha magának a menünek nincs ilyen.
FileMenu = wx.Menu() item = FileMenu.Append(wx.ID_EXIT, "&Quit") self.Bind(wx.EVT_MENU, self.OnQuit, item)
(A self itt egy wx.Frame)
Használj méretezőket (Sizer)! Ha méretezőket használsz az abszolút pozicionálás helyett, akkor olyan kódot kapsz:
wx.App() ugyanazokkal a funkcionalitásokkal bír, mint a wx.PySimpleApp(),
Használj különálló, egyedi osztályokat, ahelyett, hogy egy osztályba teszel több wx.Panels-t. Egy panel, egy osztály.
Ha csinálsz egy init metódust:
self.MainPanel = wx.Panel(self, ... self.SubPanel1 = wx.Panel(self.MainPanel, ..) self.SubPanel2 = wx.Panel(self.SubPanel1, ...) MyButton = wx.Button(self.SubPanel2, ....)
Akkor egy csúnya eredményt kapsz. E helyett készít egy szokásos osztályt egy panellel együtt:
class MainPanel(wx.Panel): #... class SubPanel1(wx.Panel): # ...
Használj natív Python megoldást ha lehet, a wx megoldások helyett:
Például használd size=(500, 400) a következő helyett: size=wx.Size(500, 400)
Használd a dokumentációs szövegeket következetesen.
Amikor egy dialógusablak alosztály használsz, a gombok korrekt elhelyezéséhez, használd a szabványos wx.ID-kat, a StdDialogButtonSizer méretezővel.
okButton = wx.Button(self, wx.ID_OK, "&OK") okButton.SetDefault() cancelButton = wx.Button(self, wx.ID_CANCEL, "&Cancel") btnSizer = wx.StdDialogButtonSizer() btnSizer.AddButton(okButton) btnSizer.AddButton(cancelButton) btnSizer.Realize()
#!/usr/bin/env python2.4 """ Ez egy kis wxPython alkalmazás, amely bemutatja hogyan írjuk pythonos wxPython kódot. """ import wx class DemoPanel(wx.Panel): """Ez a panel két gombot tartalmaz, de igazából nem csinál semmit.""" def __init__(self, parent, *args, **kwargs): """Bemutatópanel létrehozása.""" wx.Panel.__init__(self, parent, *args, **kwargs) self.parent = parent # Néha használhatsz inline megjegyzéseket NothingBtn = wx.Button(self, label="Semmit nem tesz hosszú címke") NothingBtn.Bind(wx.EVT_BUTTON, self.DoNothing ) MsgBtn = wx.Button(self, label="Üzenet küldése") MsgBtn.Bind(wx.EVT_BUTTON, self.OnMsgBtn ) Sizer = wx.BoxSizer(wx.VERTICAL) Sizer.Add(NothingBtn, 0, wx.ALIGN_CENTER|wx.ALL, 5) Sizer.Add(MsgBtn, 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizerAndFit(Sizer) def DoNothing(self, event=None): """Nem csinál semmit.""" pass def OnMsgBtn(self, event=None): """Szól egy wx.MessageDialog üzenet.""" dlg = wx.MessageDialog(self, message='Egy üzeent', caption='Üzenetdoboz', style=wx.OK|wx.ICON_INFORMATION ) dlg.ShowModal() dlg.Destroy() class DemoFrame(wx.Frame): """Főablakon egy panel.""" def __init__(self, *args, **kwargs): """Bemutatóablak létrehozása.""" wx.Frame.__init__(self, *args, **kwargs) # Menüsáv készítése MenuBar = wx.MenuBar() FileMenu = wx.Menu() item = FileMenu.Append(wx.ID_EXIT, text="&Quit") self.Bind(wx.EVT_MENU, self.OnQuit, item) MenuBar.Append(FileMenu, "&File") self.SetMenuBar(MenuBar) # Panel komponens (Widget) hozzáadása self.Panel = DemoPanel(self) self.Fit() def OnQuit(self, event=None): """Kilépés az alkalmazásból.""" self.Close() if __name__ == '__main__': app = wx.App() frame = DemoFrame(None, title="Minialkalmazás") frame.Show() app.MainLoop()