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