Added the sample code from wxPython In Action to the samples dir
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42925 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
132
wxPython/samples/wxPIA_book/Chapter-06/example5.py
Normal file
132
wxPython/samples/wxPIA_book/Chapter-06/example5.py
Normal file
@@ -0,0 +1,132 @@
|
||||
import wx
|
||||
from example1 import SketchWindow
|
||||
|
||||
|
||||
class SketchFrame(wx.Frame):
|
||||
def __init__(self, parent):
|
||||
wx.Frame.__init__(self, parent, -1, "Sketch Frame",
|
||||
size=(800,600))
|
||||
self.sketch = SketchWindow(self, -1)
|
||||
self.sketch.Bind(wx.EVT_MOTION, self.OnSketchMotion)
|
||||
self.initStatusBar()
|
||||
self.createMenuBar()
|
||||
self.createToolBar()
|
||||
|
||||
def initStatusBar(self):
|
||||
self.statusbar = self.CreateStatusBar()
|
||||
self.statusbar.SetFieldsCount(3)
|
||||
self.statusbar.SetStatusWidths([-1, -2, -3])
|
||||
|
||||
def OnSketchMotion(self, event):
|
||||
self.statusbar.SetStatusText("Pos: %s" %
|
||||
str(event.GetPositionTuple()), 0)
|
||||
self.statusbar.SetStatusText("Current Pts: %s" %
|
||||
len(self.sketch.curLine), 1)
|
||||
self.statusbar.SetStatusText("Line Count: %s" %
|
||||
len(self.sketch.lines), 2)
|
||||
event.Skip()
|
||||
|
||||
def menuData(self):
|
||||
return [("&File", (
|
||||
("&New", "New Sketch file", self.OnNew),
|
||||
("&Open", "Open sketch file", self.OnOpen),
|
||||
("&Save", "Save sketch file", self.OnSave),
|
||||
("", "", ""),
|
||||
("&Color", (
|
||||
("&Black", "", self.OnColor, wx.ITEM_RADIO),
|
||||
("&Red", "", self.OnColor, wx.ITEM_RADIO),
|
||||
("&Green", "", self.OnColor, wx.ITEM_RADIO),
|
||||
("&Blue", "", self.OnColor, wx.ITEM_RADIO))),
|
||||
("", "", ""),
|
||||
("&Quit", "Quit", self.OnCloseWindow)))]
|
||||
|
||||
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 eachItem in menuData:
|
||||
if len(eachItem) == 2:
|
||||
label = eachItem[0]
|
||||
subMenu = self.createMenu(eachItem[1])
|
||||
menu.AppendMenu(wx.NewId(), label, subMenu)
|
||||
else:
|
||||
self.createMenuItem(menu, *eachItem)
|
||||
return menu
|
||||
|
||||
def createMenuItem(self, menu, label, status, handler, kind=wx.ITEM_NORMAL):
|
||||
if not label:
|
||||
menu.AppendSeparator()
|
||||
return
|
||||
menuItem = menu.Append(-1, label, status, kind)
|
||||
self.Bind(wx.EVT_MENU, handler, menuItem)
|
||||
|
||||
def createToolBar(self):
|
||||
toolbar = self.CreateToolBar()
|
||||
for each in self.toolbarData():
|
||||
self.createSimpleTool(toolbar, *each)
|
||||
toolbar.AddSeparator()
|
||||
for each in self.toolbarColorData():
|
||||
self.createColorTool(toolbar, each)
|
||||
toolbar.Realize()
|
||||
|
||||
def createSimpleTool(self, toolbar, label, filename, help, handler):
|
||||
if not label:
|
||||
toolbar.AddSeparator()
|
||||
return
|
||||
bmp = wx.Image(filename, wx.BITMAP_TYPE_BMP).ConvertToBitmap()
|
||||
tool = toolbar.AddSimpleTool(-1, bmp, label, help)
|
||||
self.Bind(wx.EVT_MENU, handler, tool)
|
||||
|
||||
def toolbarData(self):
|
||||
return (("New", "new.bmp", "Create new sketch", self.OnNew),
|
||||
("", "", "", ""),
|
||||
("Open", "open.bmp", "Open existing sketch", self.OnOpen),
|
||||
("Save", "save.bmp", "Save existing sketch", self.OnSave))
|
||||
|
||||
def createColorTool(self, toolbar, color):
|
||||
bmp = self.MakeBitmap(color)
|
||||
tool = toolbar.AddRadioTool(-1, bmp, shortHelp=color)
|
||||
self.Bind(wx.EVT_MENU, self.OnColor, tool)
|
||||
|
||||
def MakeBitmap(self, color):
|
||||
bmp = wx.EmptyBitmap(16, 15)
|
||||
dc = wx.MemoryDC()
|
||||
dc.SelectObject(bmp)
|
||||
dc.SetBackground(wx.Brush(color))
|
||||
dc.Clear()
|
||||
dc.SelectObject(wx.NullBitmap)
|
||||
return bmp
|
||||
|
||||
def toolbarColorData(self):
|
||||
return ("Black", "Red", "Green", "Blue")
|
||||
|
||||
def OnNew(self, event): pass
|
||||
def OnOpen(self, event): pass
|
||||
def OnSave(self, event): pass
|
||||
|
||||
def OnColor(self, event):
|
||||
menubar = self.GetMenuBar()
|
||||
itemId = event.GetId()
|
||||
item = menubar.FindItemById(itemId)
|
||||
if not item:
|
||||
toolbar = self.GetToolBar()
|
||||
item = toolbar.FindById(itemId)
|
||||
color = item.GetShortHelp()
|
||||
else:
|
||||
color = item.GetLabel()
|
||||
self.sketch.SetColor(color)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = wx.PySimpleApp()
|
||||
frame = SketchFrame(None)
|
||||
frame.Show(True)
|
||||
app.MainLoop()
|
Reference in New Issue
Block a user