import wx
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Test refactoring")
makewid = MakeWidgets(self)
panel = wx.Panel(self)
self.dicData = {}
self.dicData.update(makewid.createButton(panel, self.buttonData))
self.dicData.update(makewid.createTextCtrl(panel, self.textCtrlData))
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(self.dicData.get("name"), 1, wx.EXPAND|wx.ALL, 10)
mainSizer.Add(self.dicData.get("showBtn"), 0, wx.EXPAND|wx.ALL, 10)
panel.SetSizer(mainSizer)
mainSizer.Fit(self)
mainSizer.SetSizeHints(self)
def buttonData(self):
return (("showBtn", "Show", self.OnShow),)
def textCtrlData(self):
return (("name", "", (180, 40), wx.TE_READONLY),)
def OnShow(self, event): self.dicData.get("name").SetValue("Press showBtn")
class MakeWidgets:
def __init__(self, parent):
self.gui = parent
def createButton(self, panel, function_name):
dic = {}
for eachKey, eachLabel, eachHandler in function_name():
dic[eachKey] = self.buildOneButton(panel, eachLabel, eachHandler)
return dic
def buildOneButton(self, parent, label, handler):
button = wx.Button(parent, wx.NewId(), label)
self.gui.Bind(wx.EVT_BUTTON, handler, button)
return button
def createTextCtrl(self, panel, function_name):
dic = {}
for sequence in function_name():
eachKey = sequence[0]
otherItems = sequence[1:]
dic[eachKey] = self.buildOneTextCtrl(panel, *otherItems)
return dic
def buildOneTextCtrl(self, parent, label, sz=wx.DefaultSize, st=0):
textCtrl = wx.TextCtrl(parent, wx.NewId(), label, size=sz, style=st)
return textCtrl
app = wx.PySimpleApp()
TestFrame().Show()
app.MainLoop()
Хотел узнать, кто-нибудь использует подобные приемы в своих работах или в простых приложениях это только излишне усложняет код? И можно ли привести простые примеры приложений с использованием MVC? Заранее всем спасибо.