97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import wx
|
||
|
|
||
|
class RefactorExample(wx.Frame):
|
||
|
|
||
|
def __init__(self, parent, id):
|
||
|
wx.Frame.__init__(self, parent, id, 'Refactor Example',
|
||
|
size=(340, 200))
|
||
|
panel = wx.Panel(self, -1)
|
||
|
panel.SetBackgroundColour("White")
|
||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||
|
self.createMenuBar()
|
||
|
self.createButtonBar(panel)
|
||
|
self.createTextFields(panel)
|
||
|
|
||
|
def menuData(self):
|
||
|
return (("&File",
|
||
|
("&Open", "Open in status bar", self.OnOpen),
|
||
|
("&Quit", "Quit", self.OnCloseWindow)),
|
||
|
("&Edit",
|
||
|
("&Copy", "Copy", self.OnCopy),
|
||
|
("C&ut", "Cut", self.OnCut),
|
||
|
("&Paste", "Paste", self.OnPaste),
|
||
|
("", "", ""),
|
||
|
("&Options...", "DisplayOptions", self.OnOptions)))
|
||
|
|
||
|
def createMenuBar(self):
|
||
|
menuBar = wx.MenuBar()
|
||
|
for eachMenuData in self.menuData():
|
||
|
menuLabel = eachMenuData[0]
|
||
|
menuItems = eachMenuData[1:]
|
||
|
menuBar.Append(self.createMenu(menuItems), menuLabel)
|
||
|
self.SetMenuBar(menuBar)
|
||
|
|
||
|
def createMenu(self, menuData):
|
||
|
menu = wx.Menu()
|
||
|
for eachLabel, eachStatus, eachHandler in menuData:
|
||
|
if not eachLabel:
|
||
|
menu.AppendSeparator()
|
||
|
continue
|
||
|
menuItem = menu.Append(-1, eachLabel, eachStatus)
|
||
|
self.Bind(wx.EVT_MENU, eachHandler, menuItem)
|
||
|
return menu
|
||
|
|
||
|
def buttonData(self):
|
||
|
return (("First", self.OnFirst),
|
||
|
("<< PREV", self.OnPrev),
|
||
|
("NEXT >>", self.OnNext),
|
||
|
("Last", self.OnLast))
|
||
|
|
||
|
def createButtonBar(self, panel, yPos = 0):
|
||
|
xPos = 0
|
||
|
for eachLabel, eachHandler in self.buttonData():
|
||
|
pos = (xPos, yPos)
|
||
|
button = self.buildOneButton(panel, eachLabel, eachHandler, pos)
|
||
|
xPos += button.GetSize().width
|
||
|
|
||
|
def buildOneButton(self, parent, label, handler, pos=(0,0)):
|
||
|
button = wx.Button(parent, -1, label, pos)
|
||
|
self.Bind(wx.EVT_BUTTON, handler, button)
|
||
|
return button
|
||
|
|
||
|
def textFieldData(self):
|
||
|
return (("First Name", (10, 50)),
|
||
|
("Last Name", (10, 80)))
|
||
|
|
||
|
def createTextFields(self, panel):
|
||
|
for eachLabel, eachPos in self.textFieldData():
|
||
|
self.createCaptionedText(panel, eachLabel, eachPos)
|
||
|
|
||
|
def createCaptionedText(self, panel, label, pos):
|
||
|
static = wx.StaticText(panel, wx.NewId(), label, pos)
|
||
|
static.SetBackgroundColour("White")
|
||
|
textPos = (pos[0] + 75, pos[1])
|
||
|
wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1), pos=textPos)
|
||
|
|
||
|
# Just grouping the empty event handlers together
|
||
|
def OnPrev(self, event): pass
|
||
|
def OnNext(self, event): pass
|
||
|
def OnLast(self, event): pass
|
||
|
def OnFirst(self, event): pass
|
||
|
def OnOpen(self, event): pass
|
||
|
def OnCopy(self, event): pass
|
||
|
def OnCut(self, event): pass
|
||
|
def OnPaste(self, event): pass
|
||
|
def OnOptions(self, event): pass
|
||
|
def OnCloseWindow(self, event):
|
||
|
self.Destroy()
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
app = wx.PySimpleApp()
|
||
|
frame = RefactorExample(parent=None, id=-1)
|
||
|
frame.Show()
|
||
|
app.MainLoop()
|
||
|
|