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
11
wxPython/samples/wxPIA_book/Chapter-01/bare.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
frame = wx.Frame(parent=None, title='Bare')
|
||||||
|
frame.Show()
|
||||||
|
return True
|
||||||
|
|
||||||
|
app = App()
|
||||||
|
app.MainLoop()
|
36
wxPython/samples/wxPIA_book/Chapter-01/hello.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""Hello, wxPython! program."""
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class Frame(wx.Frame):
|
||||||
|
"""Frame class that displays an image."""
|
||||||
|
|
||||||
|
def __init__(self, image, parent=None, id=-1,
|
||||||
|
pos=wx.DefaultPosition, title='Hello, wxPython!'):
|
||||||
|
"""Create a Frame instance and display image."""
|
||||||
|
temp = image.ConvertToBitmap()
|
||||||
|
size = temp.GetWidth(), temp.GetHeight()
|
||||||
|
wx.Frame.__init__(self, parent, id, title, pos, size)
|
||||||
|
panel = wx.Panel(self)
|
||||||
|
self.bmp = wx.StaticBitmap(parent=panel, bitmap=temp)
|
||||||
|
self.SetClientSize(size)
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
"""Application class."""
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
|
||||||
|
self.frame = Frame(image)
|
||||||
|
self.frame.Show()
|
||||||
|
self.SetTopWindow(self.frame)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app = App()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
36
wxPython/samples/wxPIA_book/Chapter-01/python_compare.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyApp(wx.App):
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
frame = MyFrame("Hello World", (50, 60), (450, 340))
|
||||||
|
frame.Show()
|
||||||
|
self.SetTopWindow(frame)
|
||||||
|
return True
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, title, pos, size):
|
||||||
|
wx.Frame.__init__(self, None, -1, title, pos, size)
|
||||||
|
menuFile = wx.Menu()
|
||||||
|
menuFile.Append(1, "&About...")
|
||||||
|
menuFile.AppendSeparator()
|
||||||
|
menuFile.Append(2, "E&xit")
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menuFile, "&File")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
self.CreateStatusBar()
|
||||||
|
self.SetStatusText("Welcome to wxPython!")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnAbout, id=1)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnQuit, id=2)
|
||||||
|
|
||||||
|
def OnQuit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnAbout(self, event):
|
||||||
|
wx.MessageBox("This is a wxPython Hello world sample",
|
||||||
|
"About Hello World", wx.OK | wx.ICON_INFORMATION, self)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = MyApp(False)
|
||||||
|
app.MainLoop()
|
21
wxPython/samples/wxPIA_book/Chapter-01/sample.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/env python
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
panel.Bind(wx.EVT_MOTION, self.OnMove)
|
||||||
|
wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
|
||||||
|
self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10))
|
||||||
|
|
||||||
|
def OnMove(self, event):
|
||||||
|
pos = event.GetPosition()
|
||||||
|
self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
20
wxPython/samples/wxPIA_book/Chapter-01/spare.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""Spare.py is a starting point for simple wxPython programs."""
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class Frame(wx.Frame):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
self.frame = Frame(parent=None, title='Spare')
|
||||||
|
self.frame.Show()
|
||||||
|
self.SetTopWindow(self.frame)
|
||||||
|
return True
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = App()
|
||||||
|
app.MainLoop()
|
BIN
wxPython/samples/wxPIA_book/Chapter-01/wxPython.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
36
wxPython/samples/wxPIA_book/Chapter-02/dialog_scratch.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
import images
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
|
||||||
|
def __init__(self, redirect=True, filename=None):
|
||||||
|
wx.App.__init__(self, redirect, filename)
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
dlg = wx.MessageDialog(None, 'Is this the coolest thing ever!',
|
||||||
|
'MessageDialog', wx.YES_NO | wx.ICON_QUESTION)
|
||||||
|
result = dlg.ShowModal()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
dlg = wx.TextEntryDialog(None, "Who is buried in Grant's tomb?",
|
||||||
|
'A Question', 'Cary Grant')
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
response = dlg.GetValue()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
dlg = wx.SingleChoiceDialog(None,
|
||||||
|
'What version of Python are you using?', 'Single Choice',
|
||||||
|
['1.5.2', '2.0', '2.1.3', '2.2', '2.3.1'])
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
response = dlg.GetStringSelection()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = App(False, "output")
|
||||||
|
fred = app.MainLoop()
|
||||||
|
|
24
wxPython/samples/wxPIA_book/Chapter-02/images.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#----------------------------------------------------------------------
|
||||||
|
# This file was generated by encode_bitmaps.py
|
||||||
|
#
|
||||||
|
from wx import ImageFromStream, BitmapFromImage
|
||||||
|
from wx import EmptyIcon
|
||||||
|
import cStringIO
|
||||||
|
|
||||||
|
def getNewData():
|
||||||
|
return \
|
||||||
|
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x0f\x08\x06\
|
||||||
|
\x00\x00\x00\xedsO/\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
|
||||||
|
\x00YIDATx\x9c\xed\xd31\n@!\x0c\x03\xd0\xa4\xfe\xfb\xdfX\xe3\xf0\x97R\xa5(.\
|
||||||
|
\x0ef\x13\xe45\xa2\x92Vp\x92\xcf/\xd4\xaa\xb2\xcd\xb4\xc2\x14\x00\x00in\x90\
|
||||||
|
\x84ZUDl\xa9\xa7\xc3c\xcb-\x80\xfc\x87{d8B6=B\xdb\rfy\xc0\r\xc0\xf0\x0e\xfc\
|
||||||
|
\x1d\xaf\x84\xa7\xbf\xb1\x03\xe1,\x19&\x93\x9a\xd2\x97\x00\x00\x00\x00IEND\
|
||||||
|
\xaeB`\x82'
|
||||||
|
|
||||||
|
def getNewBitmap():
|
||||||
|
return BitmapFromImage(getNewImage())
|
||||||
|
|
||||||
|
def getNewImage():
|
||||||
|
stream = cStringIO.StringIO(getNewData())
|
||||||
|
return ImageFromStream(stream)
|
||||||
|
|
27
wxPython/samples/wxPIA_book/Chapter-02/insert.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class InsertFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Frame With Button',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = wx.Panel(self)
|
||||||
|
button = wx.Button(panel, label="Close", pos=(125, 10),
|
||||||
|
size=(50, 50))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
|
||||||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = InsertFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
35
wxPython/samples/wxPIA_book/Chapter-02/startup.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class Frame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id, title):
|
||||||
|
print "Frame __init__"
|
||||||
|
wx.Frame.__init__(self, parent, id, title)
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
|
||||||
|
def __init__(self, redirect=True, filename=None):
|
||||||
|
print "App __init__"
|
||||||
|
wx.App.__init__(self, redirect, filename)
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
print "OnInit"
|
||||||
|
self.frame = Frame(parent=None, id=-1, title='Startup')
|
||||||
|
self.frame.Show()
|
||||||
|
self.SetTopWindow(self.frame)
|
||||||
|
print >> sys.stderr, "A pretend error message"
|
||||||
|
print "app name: <", self.GetVendorName(), ">"
|
||||||
|
return True
|
||||||
|
|
||||||
|
def OnExit(self):
|
||||||
|
print "OnExit"
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = App(redirect=True)
|
||||||
|
print "before MainLoop"
|
||||||
|
fred = app.MainLoop()
|
||||||
|
print "after MainLoop", fred
|
||||||
|
|
41
wxPython/samples/wxPIA_book/Chapter-02/toolbar.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
import images
|
||||||
|
|
||||||
|
class ToolbarFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Toolbars',
|
||||||
|
size=(300, 200))
|
||||||
|
panel = wx.Panel(self)
|
||||||
|
panel.SetBackgroundColour('White')
|
||||||
|
statusBar = self.CreateStatusBar()
|
||||||
|
toolbar = self.CreateToolBar()
|
||||||
|
toolbar.AddSimpleTool(wx.NewId(), images.getNewBitmap(),
|
||||||
|
"New", "Long help for 'New'")
|
||||||
|
toolbar.Realize()
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu1 = wx.Menu()
|
||||||
|
menuBar.Append(menu1, "&File")
|
||||||
|
menu2 = wx.Menu()
|
||||||
|
menu2.Append(wx.NewId(), "&Copy", "Copy in status bar")
|
||||||
|
menu2.Append(wx.NewId(), "C&ut", "")
|
||||||
|
menu2.Append(wx.NewId(), "Paste", "")
|
||||||
|
menu2.AppendSeparator()
|
||||||
|
menu2.Append(wx.NewId(), "&Options...", "Display Options")
|
||||||
|
menuBar.Append(menu2, "&Edit")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = ToolbarFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
64
wxPython/samples/wxPIA_book/Chapter-03/customEvent.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class TwoButtonEvent(wx.PyCommandEvent):
|
||||||
|
def __init__(self, evtType, id):
|
||||||
|
wx.PyCommandEvent.__init__(self, evtType, id)
|
||||||
|
self.clickCount = 0
|
||||||
|
|
||||||
|
def GetClickCount(self):
|
||||||
|
return self.clickCount
|
||||||
|
|
||||||
|
def SetClickCount(self, count):
|
||||||
|
self.clickCount = count
|
||||||
|
|
||||||
|
myEVT_TWO_BUTTON = wx.NewEventType()
|
||||||
|
EVT_TWO_BUTTON = wx.PyEventBinder(myEVT_TWO_BUTTON, 1)
|
||||||
|
|
||||||
|
class TwoButtonPanel(wx.Panel):
|
||||||
|
def __init__(self, parent, id=-1, leftText="Left",
|
||||||
|
rightText="Right"):
|
||||||
|
wx.Panel.__init__(self, parent, id)
|
||||||
|
self.leftButton = wx.Button(self, label=leftText)
|
||||||
|
self.rightButton = wx.Button(self, label=rightText,
|
||||||
|
pos=(100,0))
|
||||||
|
self.leftClick = False
|
||||||
|
self.rightClick = False
|
||||||
|
self.clickCount = 0
|
||||||
|
self.leftButton.Bind(wx.EVT_LEFT_DOWN, self.OnLeftClick)
|
||||||
|
self.rightButton.Bind(wx.EVT_LEFT_DOWN, self.OnRightClick)
|
||||||
|
|
||||||
|
def OnLeftClick(self, event):
|
||||||
|
self.leftClick = True
|
||||||
|
self.OnClick()
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def OnRightClick(self, event):
|
||||||
|
self.rightClick = True
|
||||||
|
self.OnClick()
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def OnClick(self):
|
||||||
|
self.clickCount += 1
|
||||||
|
if self.leftClick and self.rightClick:
|
||||||
|
self.leftClick = False
|
||||||
|
self.rightClick = False
|
||||||
|
evt = TwoButtonEvent(myEVT_TWO_BUTTON, self.GetId())
|
||||||
|
evt.SetClickCount(self.clickCount)
|
||||||
|
self.GetEventHandler().ProcessEvent(evt)
|
||||||
|
|
||||||
|
|
||||||
|
class CustomEventFrame(wx.Frame):
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Click Count: 0',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = TwoButtonPanel(self)
|
||||||
|
self.Bind(EVT_TWO_BUTTON, self.OnTwoClick, panel)
|
||||||
|
|
||||||
|
def OnTwoClick(self, event):
|
||||||
|
self.SetTitle("Click Count: %s" % event.GetClickCount())
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = CustomEventFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
28
wxPython/samples/wxPIA_book/Chapter-03/double_event_one.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class DoubleEventFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Frame With Button',
|
||||||
|
size=(300, 100))
|
||||||
|
self.panel = wx.Panel(self, -1)
|
||||||
|
self.button = wx.Button(self.panel, -1, "Click Me", pos=(100, 15))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnButtonClick, self.button)
|
||||||
|
self.button.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
|
||||||
|
|
||||||
|
def OnButtonClick(self, event):
|
||||||
|
self.panel.SetBackgroundColour('Green')
|
||||||
|
self.panel.Refresh()
|
||||||
|
|
||||||
|
def OnMouseDown(self, event):
|
||||||
|
self.button.SetLabel("Again!")
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = DoubleEventFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
24
wxPython/samples/wxPIA_book/Chapter-03/menu_event.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class MenuEventFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Menus', size=(300, 200))
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu1 = wx.Menu()
|
||||||
|
menuItem = menu1.Append(-1, "&Exit...")
|
||||||
|
menuBar.Append(menu1, "&File")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnCloseMe, menuItem)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MenuEventFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
34
wxPython/samples/wxPIA_book/Chapter-03/mouse_event.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class MouseEventFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Frame With Button',
|
||||||
|
size=(300, 100))
|
||||||
|
self.panel = wx.Panel(self)
|
||||||
|
self.button = wx.Button(self.panel, label="Not Over", pos=(100, 15))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnButtonClick, self.button)
|
||||||
|
self.button.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow)
|
||||||
|
self.button.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
|
||||||
|
|
||||||
|
def OnButtonClick(self, event):
|
||||||
|
self.panel.SetBackgroundColour('Green')
|
||||||
|
self.panel.Refresh()
|
||||||
|
|
||||||
|
def OnEnterWindow(self, event):
|
||||||
|
self.button.SetLabel("Over Me!")
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def OnLeaveWindow(self, event):
|
||||||
|
self.button.SetLabel("Not Over")
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MouseEventFrame(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
48
wxPython/samples/wxPIA_book/Chapter-04/PyWrap.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
"""PyWrap is a command line utility that runs a wxPython program with
|
||||||
|
additional runtime-tools, such as PyCrust."""
|
||||||
|
|
||||||
|
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
||||||
|
__cvsid__ = "$Id$"
|
||||||
|
__revision__ = "$Revision$"[11:-2]
|
||||||
|
|
||||||
|
import wx
|
||||||
|
from wx import py
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def wrap(app):
|
||||||
|
wx.InitAllImageHandlers()
|
||||||
|
frame = py.crust.CrustFrame()
|
||||||
|
frame.SetSize((750, 525))
|
||||||
|
frame.Show(True)
|
||||||
|
frame.shell.interp.locals['app'] = app
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
def main(modulename=None):
|
||||||
|
sys.path.insert(0, os.curdir)
|
||||||
|
if not modulename:
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print "Please specify a module name."
|
||||||
|
raise SystemExit
|
||||||
|
modulename = sys.argv[1]
|
||||||
|
if modulename.endswith('.py'):
|
||||||
|
modulename = modulename[:-3]
|
||||||
|
module = __import__(modulename)
|
||||||
|
# Find the App class.
|
||||||
|
App = None
|
||||||
|
d = module.__dict__
|
||||||
|
for item in d.keys():
|
||||||
|
try:
|
||||||
|
if issubclass(d[item], wx.App):
|
||||||
|
App = d[item]
|
||||||
|
except (NameError, TypeError):
|
||||||
|
pass
|
||||||
|
if App is None:
|
||||||
|
print "No App class was found."
|
||||||
|
raise SystemExit
|
||||||
|
app = App()
|
||||||
|
wrap(app)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
24
wxPython/samples/wxPIA_book/Chapter-04/images.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#----------------------------------------------------------------------
|
||||||
|
# This file was generated by encode_bitmaps.py
|
||||||
|
#
|
||||||
|
from wx import ImageFromStream, BitmapFromImage
|
||||||
|
from wx import EmptyIcon
|
||||||
|
import cStringIO
|
||||||
|
|
||||||
|
def getNewData():
|
||||||
|
return \
|
||||||
|
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x0f\x08\x06\
|
||||||
|
\x00\x00\x00\xedsO/\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
|
||||||
|
\x00YIDATx\x9c\xed\xd31\n@!\x0c\x03\xd0\xa4\xfe\xfb\xdfX\xe3\xf0\x97R\xa5(.\
|
||||||
|
\x0ef\x13\xe45\xa2\x92Vp\x92\xcf/\xd4\xaa\xb2\xcd\xb4\xc2\x14\x00\x00in\x90\
|
||||||
|
\x84ZUDl\xa9\xa7\xc3c\xcb-\x80\xfc\x87{d8B6=B\xdb\rfy\xc0\r\xc0\xf0\x0e\xfc\
|
||||||
|
\x1d\xaf\x84\xa7\xbf\xb1\x03\xe1,\x19&\x93\x9a\xd2\x97\x00\x00\x00\x00IEND\
|
||||||
|
\xaeB`\x82'
|
||||||
|
|
||||||
|
def getNewBitmap():
|
||||||
|
return BitmapFromImage(getNewImage())
|
||||||
|
|
||||||
|
def getNewImage():
|
||||||
|
stream = cStringIO.StringIO(getNewData())
|
||||||
|
return ImageFromStream(stream)
|
||||||
|
|
60
wxPython/samples/wxPIA_book/Chapter-04/pycrust-foundation.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
from wx.py.shell import ShellFrame
|
||||||
|
from wx.py.filling import FillingFrame
|
||||||
|
import images
|
||||||
|
|
||||||
|
class ToolbarFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Toolbars',
|
||||||
|
size=(300, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
panel.SetBackgroundColour('White')
|
||||||
|
statusBar = self.CreateStatusBar()
|
||||||
|
toolbar = self.CreateToolBar()
|
||||||
|
toolbar.AddSimpleTool(wx.NewId(), images.getNewBitmap(),
|
||||||
|
"New", "Long help for 'New'")
|
||||||
|
toolbar.Realize()
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu1 = wx.Menu()
|
||||||
|
menuBar.Append(menu1, "&File")
|
||||||
|
menu2 = wx.Menu()
|
||||||
|
menu2.Append(wx.NewId(), "&Copy", "Copy in status bar")
|
||||||
|
menu2.Append(wx.NewId(), "C&ut", "")
|
||||||
|
menu2.Append(wx.NewId(), "Paste", "")
|
||||||
|
menu2.AppendSeparator()
|
||||||
|
menu2.Append(wx.NewId(), "&Options...", "Display Options")
|
||||||
|
menuBar.Append(menu2, "&Edit")
|
||||||
|
|
||||||
|
menu3 = wx.Menu()
|
||||||
|
shell = menu3.Append(-1, "&Python shell",
|
||||||
|
"Open Python shell frame")
|
||||||
|
filling = menu3.Append(-1, "&Namespace viewer",
|
||||||
|
"Open namespace viewer frame")
|
||||||
|
menuBar.Append(menu3, "&Debug")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnShell, shell)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnFilling, filling)
|
||||||
|
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
def OnShell(self, event):
|
||||||
|
frame = ShellFrame(parent=self)
|
||||||
|
frame.Show()
|
||||||
|
|
||||||
|
def OnFilling(self, event):
|
||||||
|
frame = FillingFrame(parent=self)
|
||||||
|
frame.Show()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
app.frame = ToolbarFrame(parent=None, id=-1)
|
||||||
|
app.frame.Show()
|
||||||
|
app.MainLoop()
|
4
wxPython/samples/wxPIA_book/Chapter-04/pywrap
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from wx.py.PyWrap import main
|
||||||
|
main()
|
20
wxPython/samples/wxPIA_book/Chapter-04/spare.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""Spare.py is a starting point for simple wxPython programs."""
|
||||||
|
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class Frame(wx.Frame):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class App(wx.App):
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
self.frame = Frame(parent=None, id=-1, title='Spare')
|
||||||
|
self.frame.Show()
|
||||||
|
self.SetTopWindow(self.frame)
|
||||||
|
return True
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = App()
|
||||||
|
app.MainLoop()
|
15
wxPython/samples/wxPIA_book/Chapter-05/abstractmodel.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
class AbstractModel(object):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.listeners = []
|
||||||
|
|
||||||
|
def addListener(self, listenerFunc):
|
||||||
|
self.listeners.append(listenerFunc)
|
||||||
|
|
||||||
|
def removeListener(self, listenerFunc):
|
||||||
|
self.listeners.remove(listenerFunc)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
for eachFunc in self.listeners:
|
||||||
|
eachFunc(self)
|
||||||
|
|
77
wxPython/samples/wxPIA_book/Chapter-05/badExample.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/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")
|
||||||
|
prevButton = wx.Button(panel, -1, "<< PREV", pos=(80, 0))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnPrev, prevButton)
|
||||||
|
nextButton = wx.Button(panel, -1, "NEXT >>", pos=(160, 0))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnNext, nextButton)
|
||||||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu1 = wx.Menu()
|
||||||
|
openMenuItem = menu1.Append(-1, "&Open", "Copy in status bar")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnOpen, openMenuItem)
|
||||||
|
quitMenuItem = menu1.Append(-1, "&Quit", "Quit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnCloseWindow, quitMenuItem)
|
||||||
|
menuBar.Append(menu1, "&File")
|
||||||
|
menu2 = wx.Menu()
|
||||||
|
copyItem = menu2.Append(-1, "&Copy", "Copy")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnCopy, copyItem)
|
||||||
|
cutItem = menu2.Append(-1, "C&ut", "Cut")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnCut, cutItem)
|
||||||
|
pasteItem = menu2.Append(-1, "Paste", "Paste")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnPaste, pasteItem)
|
||||||
|
menuBar.Append(menu2, "&Edit")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
static = wx.StaticText(panel, wx.NewId(), "First Name",
|
||||||
|
pos=(10, 50))
|
||||||
|
static.SetBackgroundColour("White")
|
||||||
|
text = wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1),
|
||||||
|
pos=(80, 50))
|
||||||
|
|
||||||
|
static2 = wx.StaticText(panel, wx.NewId(), "Last Name",
|
||||||
|
pos=(10, 80))
|
||||||
|
static2.SetBackgroundColour("White")
|
||||||
|
text2 = wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1),
|
||||||
|
pos=(80, 80))
|
||||||
|
|
||||||
|
firstButton = wx.Button(panel, -1, "FIRST")
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnFirst, firstButton)
|
||||||
|
|
||||||
|
menu2.AppendSeparator()
|
||||||
|
optItem = menu2.Append(-1, "&Options...", "Display Options")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnOptions, optItem)
|
||||||
|
|
||||||
|
lastButton = wx.Button(panel, -1, "LAST", pos=(240, 0))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnLast, lastButton)
|
||||||
|
|
||||||
|
|
||||||
|
# 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()
|
||||||
|
|
34
wxPython/samples/wxPIA_book/Chapter-05/generictable.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import wx
|
||||||
|
import wx.grid
|
||||||
|
|
||||||
|
class GenericTable(wx.grid.PyGridTableBase):
|
||||||
|
|
||||||
|
def __init__(self, data, rowLabels=None, colLabels=None):
|
||||||
|
wx.grid.PyGridTableBase.__init__(self)
|
||||||
|
self.data = data
|
||||||
|
self.rowLabels = rowLabels
|
||||||
|
self.colLabels = colLabels
|
||||||
|
|
||||||
|
def GetNumberRows(self):
|
||||||
|
return len(self.data)
|
||||||
|
|
||||||
|
def GetNumberCols(self):
|
||||||
|
return len(self.data[0])
|
||||||
|
|
||||||
|
def GetColLabelValue(self, col):
|
||||||
|
if self.colLabels:
|
||||||
|
return self.colLabels[col]
|
||||||
|
|
||||||
|
def GetRowLabelValue(self, row):
|
||||||
|
if self.rowLabels:
|
||||||
|
return self.rowLabels[row]
|
||||||
|
|
||||||
|
def IsEmptyCell(self, row, col):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def GetValue(self, row, col):
|
||||||
|
return self.data[row][col]
|
||||||
|
|
||||||
|
def SetValue(self, row, col, value):
|
||||||
|
pass
|
||||||
|
|
96
wxPython/samples/wxPIA_book/Chapter-05/goodExample.py
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#!/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()
|
||||||
|
|
34
wxPython/samples/wxPIA_book/Chapter-05/gridGeneric.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import wx
|
||||||
|
import wx.grid
|
||||||
|
import generictable
|
||||||
|
|
||||||
|
|
||||||
|
data = (("Bob", "Dernier"), ("Ryne", "Sandberg"),
|
||||||
|
("Gary", "Matthews"), ("Leon", "Durham"),
|
||||||
|
("Keith", "Moreland"), ("Ron", "Cey"),
|
||||||
|
("Jody", "Davis"), ("Larry", "Bowa"),
|
||||||
|
("Rick", "Sutcliffe"))
|
||||||
|
|
||||||
|
colLabels = ("Last", "First")
|
||||||
|
rowLabels = ("CF", "2B", "LF", "1B", "RF", "3B", "C", "SS", "P")
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleGrid(wx.grid.Grid):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.grid.Grid.__init__(self, parent, -1)
|
||||||
|
tableBase = generictable.GenericTable(data, rowLabels,
|
||||||
|
colLabels)
|
||||||
|
self.SetTable(tableBase)
|
||||||
|
|
||||||
|
class TestFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Frame.__init__(self, parent, -1, "A Grid",
|
||||||
|
size=(275, 275))
|
||||||
|
grid = SimpleGrid(self)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = TestFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
||||||
|
|
54
wxPython/samples/wxPIA_book/Chapter-05/gridModel.py
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import wx
|
||||||
|
import wx.grid
|
||||||
|
|
||||||
|
class LineupTable(wx.grid.PyGridTableBase):
|
||||||
|
|
||||||
|
data = (("CF", "Bob", "Dernier"), ("2B", "Ryne", "Sandberg"),
|
||||||
|
("LF", "Gary", "Matthews"), ("1B", "Leon", "Durham"),
|
||||||
|
("RF", "Keith", "Moreland"), ("3B", "Ron", "Cey"),
|
||||||
|
("C", "Jody", "Davis"), ("SS", "Larry", "Bowa"),
|
||||||
|
("P", "Rick", "Sutcliffe"))
|
||||||
|
|
||||||
|
colLabels = ("Last", "First")
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
wx.grid.PyGridTableBase.__init__(self)
|
||||||
|
|
||||||
|
def GetNumberRows(self):
|
||||||
|
return len(self.data)
|
||||||
|
|
||||||
|
def GetNumberCols(self):
|
||||||
|
return len(self.data[0]) - 1
|
||||||
|
|
||||||
|
def GetColLabelValue(self, col):
|
||||||
|
return self.colLabels[col]
|
||||||
|
|
||||||
|
def GetRowLabelValue(self, row):
|
||||||
|
return self.data[row][0]
|
||||||
|
|
||||||
|
def IsEmptyCell(self, row, col):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def GetValue(self, row, col):
|
||||||
|
return self.data[row][col + 1]
|
||||||
|
|
||||||
|
def SetValue(self, row, col, value):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class SimpleGrid(wx.grid.Grid):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.grid.Grid.__init__(self, parent, -1)
|
||||||
|
self.SetTable(LineupTable())
|
||||||
|
|
||||||
|
class TestFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Frame.__init__(self, parent, -1, "A Grid",
|
||||||
|
size=(275, 275))
|
||||||
|
grid = SimpleGrid(self)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = TestFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
||||||
|
|
49
wxPython/samples/wxPIA_book/Chapter-05/gridNoModel.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import wx
|
||||||
|
import wx.grid
|
||||||
|
|
||||||
|
class SimpleGrid(wx.grid.Grid):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.grid.Grid.__init__(self, parent, -1)
|
||||||
|
self.CreateGrid(9, 2)
|
||||||
|
self.SetColLabelValue(0, "First")
|
||||||
|
self.SetColLabelValue(1, "Last")
|
||||||
|
self.SetRowLabelValue(0, "CF")
|
||||||
|
self.SetCellValue(0, 0, "Bob")
|
||||||
|
self.SetCellValue(0, 1, "Dernier")
|
||||||
|
self.SetRowLabelValue(1, "2B")
|
||||||
|
self.SetCellValue(1, 0, "Ryne")
|
||||||
|
self.SetCellValue(1, 1, "Sandberg")
|
||||||
|
self.SetRowLabelValue(2, "LF")
|
||||||
|
self.SetCellValue(2, 0, "Gary")
|
||||||
|
self.SetCellValue(2, 1, "Matthews")
|
||||||
|
self.SetRowLabelValue(3, "1B")
|
||||||
|
self.SetCellValue(3, 0, "Leon")
|
||||||
|
self.SetCellValue(3, 1, "Durham")
|
||||||
|
self.SetRowLabelValue(4, "RF")
|
||||||
|
self.SetCellValue(4, 0, "Keith")
|
||||||
|
self.SetCellValue(4, 1, "Moreland")
|
||||||
|
self.SetRowLabelValue(5, "3B")
|
||||||
|
self.SetCellValue(5, 0, "Ron")
|
||||||
|
self.SetCellValue(5, 1, "Cey")
|
||||||
|
self.SetRowLabelValue(6, "C")
|
||||||
|
self.SetCellValue(6, 0, "Jody")
|
||||||
|
self.SetCellValue(6, 1, "Davis")
|
||||||
|
self.SetRowLabelValue(7, "SS")
|
||||||
|
self.SetCellValue(7, 0, "Larry")
|
||||||
|
self.SetCellValue(7, 1, "Bowa")
|
||||||
|
self.SetRowLabelValue(8, "P")
|
||||||
|
self.SetCellValue(8, 0, "Rick")
|
||||||
|
self.SetCellValue(8, 1, "Sutcliffe")
|
||||||
|
|
||||||
|
class TestFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Frame.__init__(self, parent, -1, "A Grid",
|
||||||
|
size=(275, 275))
|
||||||
|
grid = SimpleGrid(self)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = TestFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
||||||
|
|
41
wxPython/samples/wxPIA_book/Chapter-05/lineuptable.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import wx
|
||||||
|
import wx.grid
|
||||||
|
|
||||||
|
class LineupEntry:
|
||||||
|
|
||||||
|
def __init__(self, pos, first, last):
|
||||||
|
self.pos = pos
|
||||||
|
self.first = first
|
||||||
|
self.last = last
|
||||||
|
|
||||||
|
class LineupTable(wx.grid.PyGridTableBase):
|
||||||
|
|
||||||
|
colLabels = ("First", "Last")
|
||||||
|
colAttrs = ("first", "last")
|
||||||
|
|
||||||
|
def __init__(self, entries):
|
||||||
|
wx.grid.PyGridTableBase.__init__(self)
|
||||||
|
self.entries = entries
|
||||||
|
|
||||||
|
def GetNumberRows(self):
|
||||||
|
return len(self.entries)
|
||||||
|
|
||||||
|
def GetNumberCols(self):
|
||||||
|
return 2
|
||||||
|
|
||||||
|
def GetColLabelValue(self, col):
|
||||||
|
return self.colLabels[col]
|
||||||
|
|
||||||
|
def GetRowLabelValue(self, col):
|
||||||
|
return self.entries[row].pos
|
||||||
|
|
||||||
|
def IsEmptyCell(self, row, col):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def GetValue(self, row, col):
|
||||||
|
entry = self.entries[row]
|
||||||
|
return getattr(entry, self.colAttrs[col])
|
||||||
|
|
||||||
|
def SetValue(self, row, col, value):
|
||||||
|
pass
|
||||||
|
|
89
wxPython/samples/wxPIA_book/Chapter-05/modelExample.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import wx
|
||||||
|
import abstractmodel
|
||||||
|
|
||||||
|
class SimpleName(abstractmodel.AbstractModel):
|
||||||
|
|
||||||
|
def __init__(self, first="", last=""):
|
||||||
|
abstractmodel.AbstractModel.__init__(self)
|
||||||
|
self.set(first, last)
|
||||||
|
|
||||||
|
def set(self, first, last):
|
||||||
|
self.first = first
|
||||||
|
self.last = last
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
class ModelExample(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self, parent, id):
|
||||||
|
wx.Frame.__init__(self, parent, id, 'Flintstones',
|
||||||
|
size=(340, 200))
|
||||||
|
panel = wx.Panel(self)
|
||||||
|
panel.SetBackgroundColour("White")
|
||||||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||||||
|
self.textFields = {}
|
||||||
|
self.createTextFields(panel)
|
||||||
|
self.model = SimpleName()
|
||||||
|
self.model.addListener(self.OnUpdate)
|
||||||
|
self.createButtonBar(panel)
|
||||||
|
|
||||||
|
def buttonData(self):
|
||||||
|
return (("Fredify", self.OnFred),
|
||||||
|
("Wilmafy", self.OnWilma),
|
||||||
|
("Barnify", self.OnBarney),
|
||||||
|
("Bettify", self.OnBetty))
|
||||||
|
|
||||||
|
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])
|
||||||
|
self.textFields[label] = wx.TextCtrl(panel, wx.NewId(),
|
||||||
|
"", size=(100, -1), pos=textPos,
|
||||||
|
style=wx.TE_READONLY)
|
||||||
|
|
||||||
|
def OnUpdate(self, model):
|
||||||
|
self.textFields["First Name"].SetValue(model.first)
|
||||||
|
self.textFields["Last Name"].SetValue(model.last)
|
||||||
|
|
||||||
|
def OnFred(self, event):
|
||||||
|
self.model.set("Fred", "Flintstone")
|
||||||
|
|
||||||
|
def OnBarney(self, event):
|
||||||
|
self.model.set("Barney", "Rubble")
|
||||||
|
|
||||||
|
def OnWilma(self, event):
|
||||||
|
self.model.set("Wilma", "Flintstone")
|
||||||
|
|
||||||
|
def OnBetty(self, event):
|
||||||
|
self.model.set("Betty", "Rubble")
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = ModelExample(parent=None, id=-1)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
37
wxPython/samples/wxPIA_book/Chapter-05/testEventExample.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import unittest
|
||||||
|
import modelExample
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class TestExample(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.app = wx.PySimpleApp()
|
||||||
|
self.frame = modelExample.ModelExample(parent=None, id=-1)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.frame.Destroy()
|
||||||
|
|
||||||
|
def testModel(self):
|
||||||
|
self.frame.OnBarney(None)
|
||||||
|
self.assertEqual("Barney", self.frame.model.first,
|
||||||
|
msg="First is wrong")
|
||||||
|
self.assertEqual("Rubble", self.frame.model.last)
|
||||||
|
|
||||||
|
def testEvent(self):
|
||||||
|
panel = self.frame.GetChildren()[0]
|
||||||
|
for each in panel.GetChildren():
|
||||||
|
if each.GetLabel() == "Wilmafy":
|
||||||
|
wilma = each
|
||||||
|
break
|
||||||
|
event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, wilma.GetId())
|
||||||
|
wilma.GetEventHandler().ProcessEvent(event)
|
||||||
|
self.assertEqual("Wilma", self.frame.model.first)
|
||||||
|
self.assertEqual("Flintstone", self.frame.model.last)
|
||||||
|
|
||||||
|
def suite():
|
||||||
|
suite = unittest.makeSuite(TestExample, 'test')
|
||||||
|
return suite
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main(defaultTest='suite')
|
||||||
|
|
26
wxPython/samples/wxPIA_book/Chapter-05/testExample.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import unittest
|
||||||
|
import modelExample
|
||||||
|
import wx
|
||||||
|
|
||||||
|
class TestExample(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.app = wx.PySimpleApp()
|
||||||
|
self.frame = modelExample.ModelExample(parent=None, id=-1)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.frame.Destroy()
|
||||||
|
|
||||||
|
def testModel(self):
|
||||||
|
self.frame.OnBarney(None)
|
||||||
|
self.assertEqual("Barney", self.frame.model.first,
|
||||||
|
msg="First is wrong")
|
||||||
|
self.assertEqual("Rubble", self.frame.model.last)
|
||||||
|
|
||||||
|
def suite():
|
||||||
|
suite = unittest.makeSuite(TestExample, 'test')
|
||||||
|
return suite
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main(defaultTest='suite')
|
||||||
|
|
106
wxPython/samples/wxPIA_book/Chapter-06/example1.py
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
|
||||||
|
class SketchWindow(wx.Window):
|
||||||
|
def __init__(self, parent, ID):
|
||||||
|
wx.Window.__init__(self, parent, ID)
|
||||||
|
self.SetBackgroundColour("White")
|
||||||
|
self.color = "Black"
|
||||||
|
self.thickness = 1
|
||||||
|
self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
|
||||||
|
self.lines = []
|
||||||
|
self.curLine = []
|
||||||
|
self.pos = (0, 0)
|
||||||
|
self.InitBuffer()
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
|
||||||
|
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
|
||||||
|
self.Bind(wx.EVT_MOTION, self.OnMotion)
|
||||||
|
self.Bind(wx.EVT_SIZE, self.OnSize)
|
||||||
|
self.Bind(wx.EVT_IDLE, self.OnIdle)
|
||||||
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
|
|
||||||
|
def InitBuffer(self):
|
||||||
|
size = self.GetClientSize()
|
||||||
|
#self.buffer = wx.EmptyBitmap(max(1, size.width), max(1, size.height))
|
||||||
|
self.buffer = wx.EmptyBitmap(size.width, size.height)
|
||||||
|
if self.buffer.Ok():
|
||||||
|
dc = wx.BufferedDC(None, self.buffer)
|
||||||
|
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
|
||||||
|
dc.Clear()
|
||||||
|
self.DrawLines(dc)
|
||||||
|
self.reInitBuffer = False
|
||||||
|
|
||||||
|
def GetLinesData(self):
|
||||||
|
return self.lines[:]
|
||||||
|
|
||||||
|
def SetLinesData(self, lines):
|
||||||
|
self.lines = lines[:]
|
||||||
|
self.InitBuffer()
|
||||||
|
self.Refresh()
|
||||||
|
|
||||||
|
def OnLeftDown(self, event):
|
||||||
|
self.curLine = []
|
||||||
|
self.pos = event.GetPositionTuple()
|
||||||
|
self.CaptureMouse()
|
||||||
|
|
||||||
|
def OnLeftUp(self, event):
|
||||||
|
if self.HasCapture():
|
||||||
|
self.lines.append((self.color,
|
||||||
|
self.thickness,
|
||||||
|
self.curLine))
|
||||||
|
self.curLine = []
|
||||||
|
self.ReleaseMouse()
|
||||||
|
|
||||||
|
def OnMotion(self, event):
|
||||||
|
if event.Dragging() and event.LeftIsDown():
|
||||||
|
dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
|
||||||
|
self.drawMotion(dc, event)
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def drawMotion(self, dc, event):
|
||||||
|
dc.SetPen(self.pen)
|
||||||
|
newPos = event.GetPositionTuple()
|
||||||
|
coords = self.pos + newPos
|
||||||
|
self.curLine.append(coords)
|
||||||
|
dc.DrawLine(*coords)
|
||||||
|
self.pos = newPos
|
||||||
|
|
||||||
|
def OnSize(self, event):
|
||||||
|
self.reInitBuffer = True
|
||||||
|
|
||||||
|
def OnIdle(self, event):
|
||||||
|
if self.reInitBuffer:
|
||||||
|
self.InitBuffer()
|
||||||
|
self.Refresh(False)
|
||||||
|
|
||||||
|
def OnPaint(self, event):
|
||||||
|
dc = wx.BufferedPaintDC(self, self.buffer)
|
||||||
|
|
||||||
|
def DrawLines(self, dc):
|
||||||
|
for colour, thickness, line in self.lines:
|
||||||
|
pen = wx.Pen(colour, thickness, wx.SOLID)
|
||||||
|
dc.SetPen(pen)
|
||||||
|
for coords in line:
|
||||||
|
dc.DrawLine(*coords)
|
||||||
|
|
||||||
|
def SetColor(self, color):
|
||||||
|
self.color = color
|
||||||
|
self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
|
||||||
|
|
||||||
|
def SetThickness(self, num):
|
||||||
|
self.thickness = num
|
||||||
|
self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
|
||||||
|
|
||||||
|
|
||||||
|
class SketchFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Frame.__init__(self, parent, -1, "Sketch Frame",
|
||||||
|
size=(800,600))
|
||||||
|
self.sketch = SketchWindow(self, -1)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = SketchFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
21
wxPython/samples/wxPIA_book/Chapter-06/example2.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
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.statusbar = self.CreateStatusBar()
|
||||||
|
|
||||||
|
def OnSketchMotion(self, event):
|
||||||
|
self.statusbar.SetStatusText(str(event.GetPositionTuple()))
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = SketchFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
27
wxPython/samples/wxPIA_book/Chapter-06/example3.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
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.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()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = SketchFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
92
wxPython/samples/wxPIA_book/Chapter-06/example4.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
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()
|
||||||
|
|
||||||
|
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 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)
|
||||||
|
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()
|
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()
|
192
wxPython/samples/wxPIA_book/Chapter-06/example6.py
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
import wx
|
||||||
|
import cPickle
|
||||||
|
import os
|
||||||
|
|
||||||
|
from example1 import SketchWindow
|
||||||
|
|
||||||
|
|
||||||
|
class SketchFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
self.title = "Sketch Frame"
|
||||||
|
wx.Frame.__init__(self, parent, -1, self.title,
|
||||||
|
size=(800,600))
|
||||||
|
self.filename = ""
|
||||||
|
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),
|
||||||
|
("&Other...", "", self.OnOtherColor, 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 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()
|
||||||
|
|
||||||
|
def SaveFile(self):
|
||||||
|
if self.filename:
|
||||||
|
data = self.sketch.GetLinesData()
|
||||||
|
f = open(self.filename, 'w')
|
||||||
|
cPickle.dump(data, f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def ReadFile(self):
|
||||||
|
if self.filename:
|
||||||
|
try:
|
||||||
|
f = open(self.filename, 'r')
|
||||||
|
data = cPickle.load(f)
|
||||||
|
f.close()
|
||||||
|
self.sketch.SetLinesData(data)
|
||||||
|
except cPickle.UnpicklingError:
|
||||||
|
wx.MessageBox("%s is not a sketch file." % self.filename,
|
||||||
|
"oops!", style=wx.OK|wx.ICON_EXCLAMATION)
|
||||||
|
|
||||||
|
wildcard = "Sketch files (*.sketch)|*.sketch|All files (*.*)|*.*"
|
||||||
|
|
||||||
|
def OnOpen(self, event):
|
||||||
|
dlg = wx.FileDialog(self, "Open sketch file...", os.getcwd(),
|
||||||
|
style=wx.OPEN, wildcard=self.wildcard)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
self.filename = dlg.GetPath()
|
||||||
|
self.ReadFile()
|
||||||
|
self.SetTitle(self.title + ' -- ' + self.filename)
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
def OnSave(self, event):
|
||||||
|
if not self.filename:
|
||||||
|
self.OnSaveAs(event)
|
||||||
|
else:
|
||||||
|
self.SaveFile()
|
||||||
|
|
||||||
|
def OnSaveAs(self, event):
|
||||||
|
dlg = wx.FileDialog(self, "Save sketch as...", os.getcwd(),
|
||||||
|
style=wx.SAVE | wx.OVERWRITE_PROMPT,
|
||||||
|
wildcard = self.wildcard)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
filename = dlg.GetPath()
|
||||||
|
if not os.path.splitext(filename)[1]:
|
||||||
|
filename = filename + '.sketch'
|
||||||
|
self.filename = filename
|
||||||
|
self.SaveFile()
|
||||||
|
self.SetTitle(self.title + ' -- ' + self.filename)
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
def OnOtherColor(self, event):
|
||||||
|
dlg = wx.ColourDialog(frame)
|
||||||
|
dlg.GetColourData().SetChooseFull(True)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
self.sketch.SetColor(dlg.GetColourData().GetColour())
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = SketchFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
app.MainLoop()
|
331
wxPython/samples/wxPIA_book/Chapter-06/example7.py
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
import wx
|
||||||
|
import wx.html
|
||||||
|
import cPickle
|
||||||
|
import os
|
||||||
|
from wx.lib import buttons
|
||||||
|
|
||||||
|
from example1 import SketchWindow
|
||||||
|
|
||||||
|
class SketchFrame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
self.title = "Sketch Frame"
|
||||||
|
wx.Frame.__init__(self, parent, -1, self.title,
|
||||||
|
size=(800,600))
|
||||||
|
self.filename = ""
|
||||||
|
self.sketch = SketchWindow(self, -1)
|
||||||
|
wx.EVT_MOTION(self.sketch, self.OnSketchMotion)
|
||||||
|
self.initStatusBar()
|
||||||
|
self.createMenuBar()
|
||||||
|
self.createToolBar()
|
||||||
|
self.createPanel()
|
||||||
|
|
||||||
|
def createPanel(self):
|
||||||
|
controlPanel = ControlPanel(self, -1, self.sketch)
|
||||||
|
box = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
box.Add(controlPanel, 0, wx.EXPAND)
|
||||||
|
box.Add(self.sketch, 1, wx.EXPAND)
|
||||||
|
self.SetSizer(box)
|
||||||
|
|
||||||
|
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),
|
||||||
|
("&Other...", "", self.OnOtherColor, wx.ITEM_RADIO))),
|
||||||
|
("", "", ""),
|
||||||
|
("About...", "Show about window", self.OnAbout),
|
||||||
|
("&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 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()
|
||||||
|
|
||||||
|
def SaveFile(self):
|
||||||
|
if self.filename:
|
||||||
|
data = self.sketch.GetLinesData()
|
||||||
|
f = open(self.filename, 'w')
|
||||||
|
cPickle.dump(data, f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def ReadFile(self):
|
||||||
|
if self.filename:
|
||||||
|
try:
|
||||||
|
f = open(self.filename, 'r')
|
||||||
|
data = cPickle.load(f)
|
||||||
|
f.close()
|
||||||
|
self.sketch.SetLinesData(data)
|
||||||
|
except cPickle.UnpicklingError:
|
||||||
|
wx.MessageBox("%s is not a sketch file." % self.filename,
|
||||||
|
"oops!", style=wx.OK|wx.ICON_EXCLAMATION)
|
||||||
|
|
||||||
|
wildcard = "Sketch files (*.sketch)|*.sketch|All files (*.*)|*.*"
|
||||||
|
|
||||||
|
def OnOpen(self, event):
|
||||||
|
dlg = wx.FileDialog(self, "Open sketch file...", os.getcwd(),
|
||||||
|
style=wx.OPEN, wildcard=self.wildcard)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
self.filename = dlg.GetPath()
|
||||||
|
self.ReadFile()
|
||||||
|
self.SetTitle(self.title + ' -- ' + self.filename)
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
def OnSave(self, event):
|
||||||
|
if not self.filename:
|
||||||
|
self.OnSaveAs(event)
|
||||||
|
else:
|
||||||
|
self.SaveFile()
|
||||||
|
|
||||||
|
def OnSaveAs(self, event):
|
||||||
|
dlg = wx.FileDialog(self, "Save sketch as...", os.getcwd(),
|
||||||
|
style=wx.SAVE | wx.OVERWRITE_PROMPT,
|
||||||
|
wildcard = self.wildcard)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
filename = dlg.GetPath()
|
||||||
|
if not os.path.splitext(filename)[1]:
|
||||||
|
filename = filename + '.sketch'
|
||||||
|
self.filename = filename
|
||||||
|
self.SaveFile()
|
||||||
|
self.SetTitle(self.title + ' -- ' + self.filename)
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
def OnOtherColor(self, event):
|
||||||
|
dlg = wx.ColourDialog(frame)
|
||||||
|
dlg.GetColourData().SetChooseFull(True)
|
||||||
|
if dlg.ShowModal() == wx.ID_OK:
|
||||||
|
self.sketch.SetColor(dlg.GetColourData().GetColour())
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
def OnAbout(self, event):
|
||||||
|
dlg = SketchAbout(self)
|
||||||
|
dlg.ShowModal()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
class SketchAbout(wx.Dialog):
|
||||||
|
text = '''
|
||||||
|
<html>
|
||||||
|
<body bgcolor="#ACAA60">
|
||||||
|
<center><table bgcolor="#455481" width="100%" cellspacing="0"
|
||||||
|
cellpadding="0" border="1">
|
||||||
|
<tr>
|
||||||
|
<td align="center"><h1>Sketch!</h1></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
<p><b>Sketch</b> is a demonstration program for <b>wxPython In Action</b>
|
||||||
|
Chapter 7. It is based on the SuperDoodle demo included with wxPython,
|
||||||
|
available at http://www.wxpython.org/
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><b>SuperDoodle</b> and <b>wxPython</b> are brought to you by
|
||||||
|
<b>Robin Dunn</b> and <b>Total Control Software</b>, Copyright
|
||||||
|
© 1997-2006.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
'''
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Dialog.__init__(self, parent, -1, 'About Sketch',
|
||||||
|
size=(440, 400) )
|
||||||
|
|
||||||
|
html = wx.html.HtmlWindow(self)
|
||||||
|
html.SetPage(self.text)
|
||||||
|
button = wx.Button(self, wx.ID_OK, "Okay")
|
||||||
|
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer.Add(html, 1, wx.EXPAND|wx.ALL, 5)
|
||||||
|
sizer.Add(button, 0, wx.ALIGN_CENTER|wx.ALL, 5)
|
||||||
|
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
self.Layout()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ControlPanel(wx.Panel):
|
||||||
|
|
||||||
|
BMP_SIZE = 16
|
||||||
|
BMP_BORDER = 3
|
||||||
|
NUM_COLS = 4
|
||||||
|
SPACING = 4
|
||||||
|
|
||||||
|
colorList = ('Black', 'Yellow', 'Red', 'Green', 'Blue', 'Purple',
|
||||||
|
'Brown', 'Aquamarine', 'Forest Green', 'Light Blue',
|
||||||
|
'Goldenrod', 'Cyan', 'Orange', 'Navy', 'Dark Grey',
|
||||||
|
'Light Grey')
|
||||||
|
maxThickness = 16
|
||||||
|
|
||||||
|
def __init__(self, parent, ID, sketch):
|
||||||
|
wx.Panel.__init__(self, parent, ID, style=wx.RAISED_BORDER)
|
||||||
|
self.sketch = sketch
|
||||||
|
buttonSize = (self.BMP_SIZE + 2 * self.BMP_BORDER,
|
||||||
|
self.BMP_SIZE + 2 * self.BMP_BORDER)
|
||||||
|
colorGrid = self.createColorGrid(parent, buttonSize)
|
||||||
|
thicknessGrid = self.createThicknessGrid(buttonSize)
|
||||||
|
self.layout(colorGrid, thicknessGrid)
|
||||||
|
|
||||||
|
def createColorGrid(self, parent, buttonSize):
|
||||||
|
self.colorMap = {}
|
||||||
|
self.colorButtons = {}
|
||||||
|
colorGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
|
||||||
|
for eachColor in self.colorList:
|
||||||
|
bmp = parent.MakeBitmap(eachColor)
|
||||||
|
b = buttons.GenBitmapToggleButton(self, -1, bmp, size=buttonSize)
|
||||||
|
b.SetBezelWidth(1)
|
||||||
|
b.SetUseFocusIndicator(False)
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnSetColour, b)
|
||||||
|
colorGrid.Add(b, 0)
|
||||||
|
self.colorMap[b.GetId()] = eachColor
|
||||||
|
self.colorButtons[eachColor] = b
|
||||||
|
self.colorButtons[self.colorList[0]].SetToggle(True)
|
||||||
|
return colorGrid
|
||||||
|
|
||||||
|
def createThicknessGrid(self, buttonSize):
|
||||||
|
self.thicknessIdMap = {}
|
||||||
|
self.thicknessButtons = {}
|
||||||
|
thicknessGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
|
||||||
|
for x in range(1, self.maxThickness + 1):
|
||||||
|
b = buttons.GenToggleButton(self, -1, str(x), size=buttonSize)
|
||||||
|
b.SetBezelWidth(1)
|
||||||
|
b.SetUseFocusIndicator(False)
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnSetThickness, b)
|
||||||
|
thicknessGrid.Add(b, 0)
|
||||||
|
self.thicknessIdMap[b.GetId()] = x
|
||||||
|
self.thicknessButtons[x] = b
|
||||||
|
self.thicknessButtons[1].SetToggle(True)
|
||||||
|
return thicknessGrid
|
||||||
|
|
||||||
|
def layout(self, colorGrid, thicknessGrid):
|
||||||
|
box = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
box.Add(colorGrid, 0, wx.ALL, self.SPACING)
|
||||||
|
box.Add(thicknessGrid, 0, wx.ALL, self.SPACING)
|
||||||
|
self.SetSizer(box)
|
||||||
|
box.Fit(self)
|
||||||
|
|
||||||
|
def OnSetColour(self, event):
|
||||||
|
color = self.colorMap[event.GetId()]
|
||||||
|
if color != self.sketch.color:
|
||||||
|
self.colorButtons[self.sketch.color].SetToggle(False)
|
||||||
|
self.sketch.SetColor(color)
|
||||||
|
|
||||||
|
def OnSetThickness(self, event):
|
||||||
|
thickness = self.thicknessIdMap[event.GetId()]
|
||||||
|
if thickness != self.sketch.thickness:
|
||||||
|
self.thicknessButtons[self.sketch.thickness].SetToggle(False)
|
||||||
|
self.sketch.SetThickness(thickness)
|
||||||
|
|
||||||
|
|
||||||
|
class SketchApp(wx.App):
|
||||||
|
|
||||||
|
def OnInit(self):
|
||||||
|
bmp = wx.Image("splash.png").ConvertToBitmap()
|
||||||
|
wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
|
||||||
|
1000, None, -1)
|
||||||
|
wx.Yield()
|
||||||
|
|
||||||
|
frame = SketchFrame(None)
|
||||||
|
frame.Show(True)
|
||||||
|
self.SetTopWindow(frame)
|
||||||
|
return True
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = SketchApp(False)
|
||||||
|
app.MainLoop()
|
BIN
wxPython/samples/wxPIA_book/Chapter-06/new.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
wxPython/samples/wxPIA_book/Chapter-06/open.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
wxPython/samples/wxPIA_book/Chapter-06/save.bmp
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
wxPython/samples/wxPIA_book/Chapter-06/splash.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
wxPython/samples/wxPIA_book/Chapter-07/bitmap.bmp
Normal file
After Width: | Height: | Size: 13 KiB |
25
wxPython/samples/wxPIA_book/Chapter-07/bitmap_button.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class BitmapButtonFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Bitmap Button Example',
|
||||||
|
size=(200, 150))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
bmp = wx.Image("bitmap.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
|
||||||
|
self.button = wx.BitmapButton(panel, -1, bmp, pos=(10, 20))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
|
||||||
|
self.button.SetDefault()
|
||||||
|
self.button2 = wx.BitmapButton(panel, -1, bmp, pos=(100, 20),
|
||||||
|
style=0)
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnClick, self.button2)
|
||||||
|
|
||||||
|
def OnClick(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = BitmapButtonFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
21
wxPython/samples/wxPIA_book/Chapter-07/button.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class ButtonFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Button Example',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
self.button = wx.Button(panel, -1, "Hello", pos=(50, 20))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
|
||||||
|
self.button.SetDefault()
|
||||||
|
|
||||||
|
def OnClick(self, event):
|
||||||
|
self.button.SetLabel("Clicked")
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = ButtonFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
16
wxPython/samples/wxPIA_book/Chapter-07/checkbox.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class CheckBoxFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Checkbox Example',
|
||||||
|
size=(150, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
wx.CheckBox(panel, -1, "Alpha", (35, 40), (150, 20))
|
||||||
|
wx.CheckBox(panel, -1, "Beta", (35, 60), (150, 20))
|
||||||
|
wx.CheckBox(panel, -1, "Gamma", (35, 80), (150, 20))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
CheckBoxFrame().Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
16
wxPython/samples/wxPIA_book/Chapter-07/choice.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class ChoiceFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Choice Example',
|
||||||
|
size=(250, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||||
|
'six', 'seven', 'eight']
|
||||||
|
wx.StaticText(panel, -1, "Select one:", (15, 20))
|
||||||
|
wx.Choice(panel, -1, (85, 18), choices=sampleList)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
ChoiceFrame().Show()
|
||||||
|
app.MainLoop()
|
19
wxPython/samples/wxPIA_book/Chapter-07/combo_box.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class ComboBoxFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Combo Box Example',
|
||||||
|
size=(350, 300))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||||
|
'six', 'seven', 'eight']
|
||||||
|
wx.StaticText(panel, -1, "Select one:", (15, 15))
|
||||||
|
wx.ComboBox(panel, -1, "default value", (15, 30), wx.DefaultSize,
|
||||||
|
sampleList, wx.CB_DROPDOWN)
|
||||||
|
wx.ComboBox(panel, -1, "default value", (150, 30), wx.DefaultSize,
|
||||||
|
sampleList, wx.CB_SIMPLE)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
ComboBoxFrame().Show()
|
||||||
|
app.MainLoop()
|
23
wxPython/samples/wxPIA_book/Chapter-07/gauge.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class GaugeFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Gauge Example',
|
||||||
|
size=(350, 150))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
self.count = 0
|
||||||
|
self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25))
|
||||||
|
self.gauge.SetBezelFace(3)
|
||||||
|
self.gauge.SetShadowWidth(3)
|
||||||
|
self.Bind(wx.EVT_IDLE, self.OnIdle)
|
||||||
|
|
||||||
|
def OnIdle(self, event):
|
||||||
|
self.count = self.count + 1
|
||||||
|
if self.count >= 50:
|
||||||
|
self.count = 0
|
||||||
|
self.gauge.SetValue(self.count)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
GaugeFrame().Show()
|
||||||
|
app.MainLoop()
|
56
wxPython/samples/wxPIA_book/Chapter-07/generic_button.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import wx
|
||||||
|
import wx.lib.buttons as buttons
|
||||||
|
|
||||||
|
class GenericButtonFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Generic Button Example',
|
||||||
|
size=(500, 350))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
|
||||||
|
sizer = wx.FlexGridSizer(1, 3, 20, 20)
|
||||||
|
b = wx.Button(panel, -1, "A wx.Button")
|
||||||
|
b.SetDefault()
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = wx.Button(panel, -1, "non-default wx.Button")
|
||||||
|
sizer.Add(b)
|
||||||
|
sizer.Add((10,10))
|
||||||
|
|
||||||
|
b = buttons.GenButton(panel, -1, 'Generic Button')
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = buttons.GenButton(panel, -1, 'disabled Generic')
|
||||||
|
b.Enable(False)
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = buttons.GenButton(panel, -1, 'bigger')
|
||||||
|
b.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))
|
||||||
|
b.SetBezelWidth(5)
|
||||||
|
b.SetBackgroundColour("Navy")
|
||||||
|
b.SetForegroundColour("white")
|
||||||
|
b.SetToolTipString("This is a BIG button...")
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
bmp = wx.Image("bitmap.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
|
||||||
|
b = buttons.GenBitmapButton(panel, -1, bmp)
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = buttons.GenBitmapToggleButton(panel, -1, bmp)
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = buttons.GenBitmapTextButton(panel, -1, bmp, "Bitmapped Text",
|
||||||
|
size=(175, 75))
|
||||||
|
b.SetUseFocusIndicator(False)
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
b = buttons.GenToggleButton(panel, -1, "Toggle Button")
|
||||||
|
sizer.Add(b)
|
||||||
|
|
||||||
|
panel.SetSizer(sizer)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = GenericButtonFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
21
wxPython/samples/wxPIA_book/Chapter-07/list_box.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class ListBoxFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'List Box Example',
|
||||||
|
size=(250, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
|
||||||
|
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||||
|
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
|
||||||
|
'twelve', 'thirteen', 'fourteen']
|
||||||
|
|
||||||
|
listBox = wx.ListBox(panel, -1, (20, 20), (80, 120), sampleList,
|
||||||
|
wx.LB_SINGLE)
|
||||||
|
listBox.SetSelection(3)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
ListBoxFrame().Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
32
wxPython/samples/wxPIA_book/Chapter-07/radio.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class RadioButtonFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Radio Example',
|
||||||
|
size=(200, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
radio1 = wx.RadioButton(panel, -1, "Elmo", pos=(20, 50), style=wx.RB_GROUP)
|
||||||
|
radio2 = wx.RadioButton(panel, -1, "Ernie", pos=(20, 80))
|
||||||
|
radio3 = wx.RadioButton(panel, -1, "Bert", pos=(20, 110))
|
||||||
|
text1 = wx.TextCtrl(panel, -1, "", pos=(80, 50))
|
||||||
|
text2 = wx.TextCtrl(panel, -1, "", pos=(80, 80))
|
||||||
|
text3 = wx.TextCtrl(panel, -1, "", pos=(80, 110))
|
||||||
|
self.texts = {"Elmo": text1, "Ernie": text2, "Bert": text3}
|
||||||
|
for eachText in [text2, text3]:
|
||||||
|
eachText.Enable(False)
|
||||||
|
for eachRadio in [radio1, radio2, radio3]:
|
||||||
|
self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio)
|
||||||
|
self.selectedText = text1
|
||||||
|
|
||||||
|
def OnRadio(self, event):
|
||||||
|
if self.selectedText:
|
||||||
|
self.selectedText.Enable(False)
|
||||||
|
radioSelected = event.GetEventObject()
|
||||||
|
text = self.texts[radioSelected.GetLabel()]
|
||||||
|
text.Enable(True)
|
||||||
|
self.selectedText = text
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
RadioButtonFrame().Show()
|
||||||
|
app.MainLoop()
|
19
wxPython/samples/wxPIA_book/Chapter-07/radio_box.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class RadioBoxFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Radio Box Example',
|
||||||
|
size=(350, 200))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||||
|
'six', 'seven', 'eight']
|
||||||
|
wx.RadioBox(panel, -1, "A Radio Box", (10, 10), wx.DefaultSize,
|
||||||
|
sampleList, 2, wx.RA_SPECIFY_COLS)
|
||||||
|
|
||||||
|
wx.RadioBox(panel, -1, "", (150, 10), wx.DefaultSize,
|
||||||
|
sampleList, 3, wx.RA_SPECIFY_COLS | wx.NO_BORDER)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
RadioBoxFrame().Show()
|
||||||
|
app.MainLoop()
|
22
wxPython/samples/wxPIA_book/Chapter-07/slider.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class SliderFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Slider Example',
|
||||||
|
size=(300, 350))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
self.count = 0
|
||||||
|
slider = wx.Slider(panel, 100, 25, 1, 100, pos=(10, 10),
|
||||||
|
size=(250, -1),
|
||||||
|
style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
|
||||||
|
slider.SetTickFreq(5, 1)
|
||||||
|
slider = wx.Slider(panel, 100, 25, 1, 100, pos=(125, 70),
|
||||||
|
size=(-1, 250),
|
||||||
|
style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
|
||||||
|
slider.SetTickFreq(20, 1)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = SliderFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
15
wxPython/samples/wxPIA_book/Chapter-07/spinner.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class SpinnerFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Spinner Example',
|
||||||
|
size=(100, 100))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
sc = wx.SpinCtrl(panel, -1, "", (30, 20), (80, -1))
|
||||||
|
sc.SetRange(1,100)
|
||||||
|
sc.SetValue(5)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
SpinnerFrame().Show()
|
||||||
|
app.MainLoop()
|
38
wxPython/samples/wxPIA_book/Chapter-07/static_text.py
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class StaticTextFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Static Text Example',
|
||||||
|
size=(400, 300))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
wx.StaticText(panel, -1, "This is an example of static text",
|
||||||
|
(100, 10))
|
||||||
|
rev = wx.StaticText(panel, -1, "Static Text With Reversed Colors",
|
||||||
|
(100, 30))
|
||||||
|
rev.SetForegroundColour('white')
|
||||||
|
rev.SetBackgroundColour('black')
|
||||||
|
center = wx.StaticText(panel, -1, "align center", (100, 50),
|
||||||
|
(160, -1), wx.ALIGN_CENTER)
|
||||||
|
center.SetForegroundColour('white')
|
||||||
|
center.SetBackgroundColour('black')
|
||||||
|
right = wx.StaticText(panel, -1, "align right", (100, 70),
|
||||||
|
(160, -1), wx.ALIGN_RIGHT)
|
||||||
|
right.SetForegroundColour('white')
|
||||||
|
right.SetBackgroundColour('black')
|
||||||
|
str = "You can also change the font."
|
||||||
|
text = wx.StaticText(panel, -1, str, (20, 100))
|
||||||
|
font = wx.Font(18, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
|
||||||
|
text.SetFont(font)
|
||||||
|
wx.StaticText(panel, -1, "Your text\ncan be split\n"
|
||||||
|
"over multiple lines\n\neven blank ones", (20,150))
|
||||||
|
wx.StaticText(panel, -1, "Multi-line text\ncan also\n"
|
||||||
|
"be right aligned\n\neven with a blank", (220,150),
|
||||||
|
style=wx.ALIGN_RIGHT)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = StaticTextFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
25
wxPython/samples/wxPIA_book/Chapter-07/text_ctrl.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class TextFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Text Entry Example',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
basicLabel = wx.StaticText(panel, -1, "Basic Control:")
|
||||||
|
basicText = wx.TextCtrl(panel, -1, "I've entered some text!",
|
||||||
|
size=(175, -1))
|
||||||
|
basicText.SetInsertionPoint(0)
|
||||||
|
|
||||||
|
pwdLabel = wx.StaticText(panel, -1, "Password:")
|
||||||
|
pwdText = wx.TextCtrl(panel, -1, "password", size=(175, -1),
|
||||||
|
style=wx.TE_PASSWORD)
|
||||||
|
sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
|
||||||
|
sizer.AddMany([basicLabel, basicText, pwdLabel, pwdText])
|
||||||
|
panel.SetSizer(sizer)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = TextFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
33
wxPython/samples/wxPIA_book/Chapter-07/text_ctrl_multiple.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class TextFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Text Entry Example',
|
||||||
|
size=(300, 250))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
multiLabel = wx.StaticText(panel, -1, "Multi-line")
|
||||||
|
multiText = wx.TextCtrl(panel, -1,
|
||||||
|
"Here is a looooooooooooooong line of text set in the control.\n\n"
|
||||||
|
"See that it wrapped, and that this line is after a blank",
|
||||||
|
size=(200, 100), style=wx.TE_MULTILINE)
|
||||||
|
multiText.SetInsertionPoint(0)
|
||||||
|
|
||||||
|
richLabel = wx.StaticText(panel, -1, "Rich Text")
|
||||||
|
richText = wx.TextCtrl(panel, -1,
|
||||||
|
"If supported by the native control, this is reversed, and this is a different font.",
|
||||||
|
size=(200, 100), style=wx.TE_MULTILINE|wx.TE_RICH2)
|
||||||
|
richText.SetInsertionPoint(0)
|
||||||
|
richText.SetStyle(44, 52, wx.TextAttr("white", "black"))
|
||||||
|
points = richText.GetFont().GetPointSize()
|
||||||
|
f = wx.Font(points + 3, wx.ROMAN, wx.ITALIC, wx.BOLD, True)
|
||||||
|
richText.SetStyle(68, 82, wx.TextAttr("blue", wx.NullColour, f))
|
||||||
|
sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
|
||||||
|
sizer.AddMany([multiLabel, multiText, richLabel, richText])
|
||||||
|
panel.SetSizer(sizer)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = TextFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
21
wxPython/samples/wxPIA_book/Chapter-08/frame_subclass.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class SubclassFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Frame Subclass',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = wx.Panel(self, -1)
|
||||||
|
button = wx.Button(panel, -1, "Close Me", pos=(15, 15))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
|
||||||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
SubclassFrame().Show()
|
||||||
|
app.MainLoop()
|
16
wxPython/samples/wxPIA_book/Chapter-08/help_context.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class HelpFrame(wx.Frame):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pre = wx.PreFrame()
|
||||||
|
pre.SetExtraStyle(wx.FRAME_EX_CONTEXTHELP)
|
||||||
|
pre.Create(None, -1, "Help Context", size=(300, 100),
|
||||||
|
style=wx.DEFAULT_FRAME_STYLE ^
|
||||||
|
(wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX))
|
||||||
|
self.PostCreate(pre)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
HelpFrame().Show()
|
||||||
|
app.MainLoop()
|
1424
wxPython/samples/wxPIA_book/Chapter-08/images.py
Normal file
29
wxPython/samples/wxPIA_book/Chapter-08/mdi.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MDIFrame(wx.MDIParentFrame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent",
|
||||||
|
size=(600,400))
|
||||||
|
menu = wx.Menu()
|
||||||
|
menu.Append(5000, "&New Window")
|
||||||
|
menu.Append(5001, "E&xit")
|
||||||
|
menubar = wx.MenuBar()
|
||||||
|
menubar.Append(menu, "&File")
|
||||||
|
self.SetMenuBar(menubar)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnNewWindow, id=5000)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, id=5001)
|
||||||
|
|
||||||
|
def OnExit(self, evt):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnNewWindow(self, evt):
|
||||||
|
win = wx.MDIChildFrame(self, -1, "Child Window")
|
||||||
|
win.Show(True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MDIFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
21
wxPython/samples/wxPIA_book/Chapter-08/miniframe.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MiniFrame(wx.MiniFrame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.MiniFrame.__init__(self, None, -1, 'Mini Frame',
|
||||||
|
size=(300, 100))
|
||||||
|
panel = wx.Panel(self, -1, size=(300, 100))
|
||||||
|
button = wx.Button(panel, -1, "Close Me", pos=(15, 15))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
|
||||||
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
||||||
|
|
||||||
|
def OnCloseMe(self, event):
|
||||||
|
self.Close(True)
|
||||||
|
|
||||||
|
def OnCloseWindow(self, event):
|
||||||
|
self.Destroy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
MiniFrame().Show()
|
||||||
|
app.MainLoop()
|
26
wxPython/samples/wxPIA_book/Chapter-08/scroll_window.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class ScrollbarFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, 'Scrollbar Example',
|
||||||
|
size=(300, 200))
|
||||||
|
self.scroll = wx.ScrolledWindow(self, -1)
|
||||||
|
self.scroll.SetScrollbars(1, 1, 600, 400)
|
||||||
|
self.button = wx.Button(self.scroll, -1, "Scroll Me", pos=(50, 20))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnClickTop, self.button)
|
||||||
|
self.button2 = wx.Button(self.scroll, -1, "Scroll Back", pos=(500, 350))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnClickBottom, self.button2)
|
||||||
|
|
||||||
|
def OnClickTop(self, event):
|
||||||
|
self.scroll.Scroll(600, 400)
|
||||||
|
|
||||||
|
def OnClickBottom(self, event):
|
||||||
|
self.scroll.Scroll(1, 1)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = ScrollbarFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
43
wxPython/samples/wxPIA_book/Chapter-08/shaped_frame.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import wx
|
||||||
|
import images
|
||||||
|
|
||||||
|
class ShapedFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "Shaped Window",
|
||||||
|
style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER |
|
||||||
|
wx.FRAME_NO_TASKBAR)
|
||||||
|
self.hasShape = False
|
||||||
|
self.bmp = images.getVippiBitmap()
|
||||||
|
self.SetClientSize((self.bmp.GetWidth(), self.bmp.GetHeight()))
|
||||||
|
dc = wx.ClientDC(self)
|
||||||
|
dc.DrawBitmap(self.bmp, 0,0, True)
|
||||||
|
self.SetWindowShape()
|
||||||
|
self.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
|
||||||
|
self.Bind(wx.EVT_RIGHT_UP, self.OnExit)
|
||||||
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
|
self.Bind(wx.EVT_WINDOW_CREATE, self.SetWindowShape)
|
||||||
|
|
||||||
|
def SetWindowShape(self, evt=None):
|
||||||
|
r = wx.RegionFromBitmap(self.bmp)
|
||||||
|
self.hasShape = self.SetShape(r)
|
||||||
|
|
||||||
|
def OnDoubleClick(self, evt):
|
||||||
|
if self.hasShape:
|
||||||
|
self.SetShape(wx.Region())
|
||||||
|
self.hasShape = False
|
||||||
|
else:
|
||||||
|
self.SetWindowShape()
|
||||||
|
|
||||||
|
def OnPaint(self, evt):
|
||||||
|
dc = wx.PaintDC(self)
|
||||||
|
dc.DrawBitmap(self.bmp, 0,0, True)
|
||||||
|
|
||||||
|
def OnExit(self, evt):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
ShapedFrame().Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
@@ -0,0 +1,64 @@
|
|||||||
|
import wx
|
||||||
|
import images
|
||||||
|
|
||||||
|
class ShapedFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "Shaped Window",
|
||||||
|
style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER )
|
||||||
|
self.hasShape = False
|
||||||
|
self.delta = wx.Point(0,0)
|
||||||
|
self.bmp = images.getVippiBitmap()
|
||||||
|
self.SetClientSize((self.bmp.GetWidth(), self.bmp.GetHeight()))
|
||||||
|
dc = wx.ClientDC(self)
|
||||||
|
dc.DrawBitmap(self.bmp, 0,0, True)
|
||||||
|
self.SetWindowShape()
|
||||||
|
self.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
|
||||||
|
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
|
||||||
|
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
|
||||||
|
self.Bind(wx.EVT_MOTION, self.OnMouseMove)
|
||||||
|
self.Bind(wx.EVT_RIGHT_UP, self.OnExit)
|
||||||
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
|
self.Bind(wx.EVT_WINDOW_CREATE, self.SetWindowShape)
|
||||||
|
|
||||||
|
def SetWindowShape(self, evt=None):
|
||||||
|
r = wx.RegionFromBitmap(self.bmp)
|
||||||
|
self.hasShape = self.SetShape(r)
|
||||||
|
|
||||||
|
def OnDoubleClick(self, evt):
|
||||||
|
if self.hasShape:
|
||||||
|
self.SetShape(wx.Region())
|
||||||
|
self.hasShape = False
|
||||||
|
else:
|
||||||
|
self.SetWindowShape()
|
||||||
|
|
||||||
|
def OnPaint(self, evt):
|
||||||
|
dc = wx.PaintDC(self)
|
||||||
|
dc.DrawBitmap(self.bmp, 0,0, True)
|
||||||
|
|
||||||
|
def OnExit(self, evt):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnLeftDown(self, evt):
|
||||||
|
self.CaptureMouse()
|
||||||
|
pos = self.ClientToScreen(evt.GetPosition())
|
||||||
|
origin = self.GetPosition()
|
||||||
|
self.delta = wx.Point(pos.x - origin.x, pos.y - origin.y)
|
||||||
|
|
||||||
|
def OnMouseMove(self, evt):
|
||||||
|
if evt.Dragging() and evt.LeftIsDown():
|
||||||
|
pos = self.ClientToScreen(evt.GetPosition())
|
||||||
|
newPos = (pos.x - self.delta.x, pos.y - self.delta.y)
|
||||||
|
self.Move(newPos)
|
||||||
|
|
||||||
|
def OnLeftUp(self, evt):
|
||||||
|
if self.HasCapture():
|
||||||
|
self.ReleaseMouse()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
ShapedFrame().Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
8
wxPython/samples/wxPIA_book/Chapter-08/simple_frame.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = wx.Frame(None, -1, "A Frame", style=wx.DEFAULT_FRAME_STYLE,
|
||||||
|
size=(200, 100))
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
101
wxPython/samples/wxPIA_book/Chapter-08/splitter.py
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class SplitterExampleFrame(wx.Frame):
|
||||||
|
def __init__(self, parent, title):
|
||||||
|
wx.Frame.__init__(self, parent, title=title)
|
||||||
|
self.MakeMenuBar()
|
||||||
|
self.minpane = 0
|
||||||
|
self.initpos = 0
|
||||||
|
self.sp = wx.SplitterWindow(self)
|
||||||
|
self.p1 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
|
||||||
|
self.p2 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
|
||||||
|
self.p1.SetBackgroundColour("pink")
|
||||||
|
self.p2.SetBackgroundColour("sky blue")
|
||||||
|
self.p1.Hide()
|
||||||
|
self.p2.Hide()
|
||||||
|
|
||||||
|
self.sp.Initialize(self.p1)
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING,
|
||||||
|
self.OnSashChanging, self.sp)
|
||||||
|
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED,
|
||||||
|
self.OnSashChanged, self.sp)
|
||||||
|
|
||||||
|
|
||||||
|
def MakeMenuBar(self):
|
||||||
|
menu = wx.Menu()
|
||||||
|
item = menu.Append(-1, "Split horizontally")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSplitH, item)
|
||||||
|
self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanSplit, item)
|
||||||
|
item = menu.Append(-1, "Split vertically")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSplitV, item)
|
||||||
|
self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanSplit, item)
|
||||||
|
item = menu.Append(-1, "Unsplit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnUnsplit, item)
|
||||||
|
self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanUnsplit, item)
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
item = menu.Append(-1, "Set initial sash position")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSetPos, item)
|
||||||
|
item = menu.Append(-1, "Set minimum pane size")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSetMin, item)
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
item = menu.Append(wx.ID_EXIT, "E&xit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, item)
|
||||||
|
|
||||||
|
mbar = wx.MenuBar()
|
||||||
|
mbar.Append(menu, "Splitter")
|
||||||
|
self.SetMenuBar(mbar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSashChanging(self, evt):
|
||||||
|
print "OnSashChanging:", evt.GetSashPosition()
|
||||||
|
|
||||||
|
def OnSashChanged(self, evt):
|
||||||
|
print "OnSashChanged:", evt.GetSashPosition()
|
||||||
|
|
||||||
|
|
||||||
|
def OnSplitH(self, evt):
|
||||||
|
self.sp.SplitHorizontally(self.p1, self.p2, self.initpos)
|
||||||
|
|
||||||
|
def OnSplitV(self, evt):
|
||||||
|
self.sp.SplitVertically(self.p1, self.p2, self.initpos)
|
||||||
|
|
||||||
|
def OnCheckCanSplit(self, evt):
|
||||||
|
evt.Enable(not self.sp.IsSplit())
|
||||||
|
|
||||||
|
def OnCheckCanUnsplit(self, evt):
|
||||||
|
evt.Enable(self.sp.IsSplit())
|
||||||
|
|
||||||
|
def OnUnsplit(self, evt):
|
||||||
|
self.sp.Unsplit()
|
||||||
|
|
||||||
|
def OnSetMin(self, evt):
|
||||||
|
minpane = wx.GetNumberFromUser(
|
||||||
|
"Enter the minimum pane size",
|
||||||
|
"", "Minimum Pane Size", self.minpane,
|
||||||
|
0, 1000, self)
|
||||||
|
if minpane != -1:
|
||||||
|
self.minpane = minpane
|
||||||
|
self.sp.SetMinimumPaneSize(self.minpane)
|
||||||
|
|
||||||
|
def OnSetPos(self, evt):
|
||||||
|
initpos = wx.GetNumberFromUser(
|
||||||
|
"Enter the initial sash position (to be used in the Split call)",
|
||||||
|
"", "Initial Sash Position", self.initpos,
|
||||||
|
-1000, 1000, self)
|
||||||
|
if initpos != -1:
|
||||||
|
self.initpos = initpos
|
||||||
|
|
||||||
|
|
||||||
|
def OnExit(self, evt):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
app = wx.PySimpleApp(redirect=True)
|
||||||
|
frm = SplitterExampleFrame(None, "Splitter Example")
|
||||||
|
frm.SetSize((600,500))
|
||||||
|
frm.Show()
|
||||||
|
app.SetTopWindow(frm)
|
||||||
|
app.MainLoop()
|
12
wxPython/samples/wxPIA_book/Chapter-09/choice_box.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
choices = ["Alpha", "Baker", "Charlie", "Delta"]
|
||||||
|
dialog = wx.SingleChoiceDialog(None, "Pick A Word", "Choices",
|
||||||
|
choices)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
print "You selected: %s\n" % dialog.GetStringSelection()
|
||||||
|
|
||||||
|
dialog.Destroy()
|
||||||
|
|
10
wxPython/samples/wxPIA_book/Chapter-09/color_box.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dialog = wx.ColourDialog(None)
|
||||||
|
dialog.GetColourData().SetChooseFull(True)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
data = dialog.GetColourData()
|
||||||
|
print 'You selected: %s\n' % str(data.GetColour().Get())
|
||||||
|
dialog.Destroy()
|
12
wxPython/samples/wxPIA_book/Chapter-09/dir_box.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dialog = wx.DirDialog(None, "Choose a directory:",
|
||||||
|
style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
print dialog.GetPath()
|
||||||
|
dialog.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
|
17
wxPython/samples/wxPIA_book/Chapter-09/file_box.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import wx
|
||||||
|
import os
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
wildcard = "Python source (*.py)|*.py|" \
|
||||||
|
"Compiled Python (*.pyc)|*.pyc|" \
|
||||||
|
"All files (*.*)|*.*"
|
||||||
|
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(),
|
||||||
|
"", wildcard, wx.OPEN)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
print dialog.GetPath()
|
||||||
|
|
||||||
|
dialog.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
|
16
wxPython/samples/wxPIA_book/Chapter-09/font_box.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dialog = wx.FontDialog(None, wx.FontData())
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
data = dialog.GetFontData()
|
||||||
|
font = data.GetChosenFont()
|
||||||
|
colour = data.GetColour()
|
||||||
|
print 'You selected: "%s", %d points\n' % (
|
||||||
|
font.GetFaceName(), font.GetPointSize())
|
||||||
|
dialog.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
11
wxPython/samples/wxPIA_book/Chapter-09/image_box.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import wx
|
||||||
|
import wx.lib.imagebrowser as imagebrowser
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dialog = imagebrowser.ImageDialog(None)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
print "You Selected File: " + dialog.GetFile()
|
||||||
|
dialog.Destroy()
|
||||||
|
|
||||||
|
|
16
wxPython/samples/wxPIA_book/Chapter-09/message_box.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dlg = wx.MessageDialog(None, "Is this explanation OK?",
|
||||||
|
'A Message Box',
|
||||||
|
wx.YES_NO | wx.ICON_QUESTION)
|
||||||
|
retCode = dlg.ShowModal()
|
||||||
|
if (retCode == wx.ID_YES):
|
||||||
|
print "yes"
|
||||||
|
else:
|
||||||
|
print "no"
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
retCode = wx.MessageBox("Is this way easier?", "Via Function",
|
||||||
|
wx.YES_NO | wx.ICON_QUESTION)
|
21
wxPython/samples/wxPIA_book/Chapter-09/modal_dialog.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class SubclassDialog(wx.Dialog):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Dialog.__init__(self, None, -1, 'Dialog Subclass',
|
||||||
|
size=(300, 100))
|
||||||
|
okButton = wx.Button(self, wx.ID_OK, "OK", pos=(15, 15))
|
||||||
|
okButton.SetDefault()
|
||||||
|
cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel",
|
||||||
|
pos=(115, 15))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
app.MainLoop()
|
||||||
|
dialog = SubclassDialog()
|
||||||
|
result = dialog.ShowModal()
|
||||||
|
if result == wx.ID_OK:
|
||||||
|
print "OK"
|
||||||
|
else:
|
||||||
|
print "Cancel"
|
||||||
|
dialog.Destroy()
|
33
wxPython/samples/wxPIA_book/Chapter-09/progress_box.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class Frame(wx.Frame):
|
||||||
|
def __init__(self, parent):
|
||||||
|
wx.Frame.__init__(self, parent, title="ProgressDialog sample")
|
||||||
|
self.progressMax = 100
|
||||||
|
self.count = 0
|
||||||
|
self.dialog = None
|
||||||
|
self.timer = wx.Timer(self)
|
||||||
|
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
|
||||||
|
self.timer.Start(1000)
|
||||||
|
|
||||||
|
def OnTimer(self, evt):
|
||||||
|
if not self.dialog:
|
||||||
|
self.dialog = wx.ProgressDialog("A progress box", "Time remaining",
|
||||||
|
self.progressMax,
|
||||||
|
style=wx.PD_CAN_ABORT
|
||||||
|
| wx.PD_ELAPSED_TIME
|
||||||
|
| wx.PD_REMAINING_TIME)
|
||||||
|
|
||||||
|
self.count += 1
|
||||||
|
keepGoing = self.dialog.Update(self.count)
|
||||||
|
if not keepGoing or self.count == self.progressMax:
|
||||||
|
self.dialog.Destroy()
|
||||||
|
self.timer.Stop()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = Frame(None)
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
8
wxPython/samples/wxPIA_book/Chapter-09/startup_tip.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
provider = wx.CreateFileTipProvider("tips.txt", 0)
|
||||||
|
wx.ShowTip(None, provider, True)
|
||||||
|
|
||||||
|
|
11
wxPython/samples/wxPIA_book/Chapter-09/text_box.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
dialog = wx.TextEntryDialog(None,
|
||||||
|
"What kind of text would you like to enter?",
|
||||||
|
"Text Entry", "Default Value", style=wx.OK|wx.CANCEL)
|
||||||
|
if dialog.ShowModal() == wx.ID_OK:
|
||||||
|
print "You entered: %s" % dialog.GetValue()
|
||||||
|
|
||||||
|
dialog.Destroy()
|
2
wxPython/samples/wxPIA_book/Chapter-09/tips.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
You can do startup tips very easily.
|
||||||
|
Feel the force, Luke.
|
93
wxPython/samples/wxPIA_book/Chapter-09/validator1.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
about_txt = """\
|
||||||
|
The validator used in this example will ensure that the text
|
||||||
|
controls are not empty when you press the Ok button, and
|
||||||
|
will not let you leave if any of the Validations fail."""
|
||||||
|
|
||||||
|
|
||||||
|
class NotEmptyValidator(wx.PyValidator):
|
||||||
|
def __init__(self):
|
||||||
|
wx.PyValidator.__init__(self)
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
"""
|
||||||
|
Note that every validator must implement the Clone() method.
|
||||||
|
"""
|
||||||
|
return NotEmptyValidator()
|
||||||
|
|
||||||
|
def Validate(self, win):
|
||||||
|
textCtrl = self.GetWindow()
|
||||||
|
text = textCtrl.GetValue()
|
||||||
|
|
||||||
|
if len(text) == 0:
|
||||||
|
wx.MessageBox("This field must contain some text!", "Error")
|
||||||
|
textCtrl.SetBackgroundColour("pink")
|
||||||
|
textCtrl.SetFocus()
|
||||||
|
textCtrl.Refresh()
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
textCtrl.SetBackgroundColour(
|
||||||
|
wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
|
||||||
|
textCtrl.Refresh()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferToWindow(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferFromWindow(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MyDialog(wx.Dialog):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Dialog.__init__(self, None, -1, "Validators: validating")
|
||||||
|
|
||||||
|
# Create the text controls
|
||||||
|
about = wx.StaticText(self, -1, about_txt)
|
||||||
|
name_l = wx.StaticText(self, -1, "Name:")
|
||||||
|
email_l = wx.StaticText(self, -1, "Email:")
|
||||||
|
phone_l = wx.StaticText(self, -1, "Phone:")
|
||||||
|
|
||||||
|
name_t = wx.TextCtrl(self, validator=NotEmptyValidator())
|
||||||
|
email_t = wx.TextCtrl(self, validator=NotEmptyValidator())
|
||||||
|
phone_t = wx.TextCtrl(self, validator=NotEmptyValidator())
|
||||||
|
|
||||||
|
# Use standard button IDs
|
||||||
|
okay = wx.Button(self, wx.ID_OK)
|
||||||
|
okay.SetDefault()
|
||||||
|
cancel = wx.Button(self, wx.ID_CANCEL)
|
||||||
|
|
||||||
|
# Layout with sizers
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer.Add(about, 0, wx.ALL, 5)
|
||||||
|
sizer.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
fgs = wx.FlexGridSizer(3, 2, 5, 5)
|
||||||
|
fgs.Add(name_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(name_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(email_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(email_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(phone_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(phone_t, 0, wx.EXPAND)
|
||||||
|
fgs.AddGrowableCol(1)
|
||||||
|
sizer.Add(fgs, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
btns = wx.StdDialogButtonSizer()
|
||||||
|
btns.AddButton(okay)
|
||||||
|
btns.AddButton(cancel)
|
||||||
|
btns.Realize()
|
||||||
|
sizer.Add(btns, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
sizer.Fit(self)
|
||||||
|
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
|
||||||
|
dlg = MyDialog()
|
||||||
|
dlg.ShowModal()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
app.MainLoop()
|
91
wxPython/samples/wxPIA_book/Chapter-09/validator2.py
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
import wx
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
about_txt = """\
|
||||||
|
The validator used in this example shows how the validator
|
||||||
|
can be used to transfer data to and from each text control
|
||||||
|
automatically when the dialog is shown and dismissed."""
|
||||||
|
|
||||||
|
|
||||||
|
class DataXferValidator(wx.PyValidator):
|
||||||
|
def __init__(self, data, key):
|
||||||
|
wx.PyValidator.__init__(self)
|
||||||
|
self.data = data
|
||||||
|
self.key = key
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
"""
|
||||||
|
Note that every validator must implement the Clone() method.
|
||||||
|
"""
|
||||||
|
return DataXferValidator(self.data, self.key)
|
||||||
|
|
||||||
|
def Validate(self, win):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferToWindow(self):
|
||||||
|
textCtrl = self.GetWindow()
|
||||||
|
textCtrl.SetValue(self.data.get(self.key, ""))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferFromWindow(self):
|
||||||
|
textCtrl = self.GetWindow()
|
||||||
|
self.data[self.key] = textCtrl.GetValue()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MyDialog(wx.Dialog):
|
||||||
|
def __init__(self, data):
|
||||||
|
wx.Dialog.__init__(self, None, -1, "Validators: data transfer")
|
||||||
|
|
||||||
|
# Create the text controls
|
||||||
|
about = wx.StaticText(self, -1, about_txt)
|
||||||
|
name_l = wx.StaticText(self, -1, "Name:")
|
||||||
|
email_l = wx.StaticText(self, -1, "Email:")
|
||||||
|
phone_l = wx.StaticText(self, -1, "Phone:")
|
||||||
|
|
||||||
|
name_t = wx.TextCtrl(self, validator=DataXferValidator(data, "name"))
|
||||||
|
email_t = wx.TextCtrl(self, validator=DataXferValidator(data, "email"))
|
||||||
|
phone_t = wx.TextCtrl(self, validator=DataXferValidator(data, "phone"))
|
||||||
|
|
||||||
|
# Use standard button IDs
|
||||||
|
okay = wx.Button(self, wx.ID_OK)
|
||||||
|
okay.SetDefault()
|
||||||
|
cancel = wx.Button(self, wx.ID_CANCEL)
|
||||||
|
|
||||||
|
# Layout with sizers
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer.Add(about, 0, wx.ALL, 5)
|
||||||
|
sizer.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
fgs = wx.FlexGridSizer(3, 2, 5, 5)
|
||||||
|
fgs.Add(name_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(name_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(email_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(email_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(phone_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(phone_t, 0, wx.EXPAND)
|
||||||
|
fgs.AddGrowableCol(1)
|
||||||
|
sizer.Add(fgs, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
btns = wx.StdDialogButtonSizer()
|
||||||
|
btns.AddButton(okay)
|
||||||
|
btns.AddButton(cancel)
|
||||||
|
btns.Realize()
|
||||||
|
sizer.Add(btns, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
sizer.Fit(self)
|
||||||
|
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
|
||||||
|
data = { "name" : "Jordyn Dunn" }
|
||||||
|
dlg = MyDialog(data)
|
||||||
|
dlg.ShowModal()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
wx.MessageBox("You entered these values:\n\n" +
|
||||||
|
pprint.pformat(data))
|
||||||
|
|
||||||
|
app.MainLoop()
|
92
wxPython/samples/wxPIA_book/Chapter-09/validator3.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import wx
|
||||||
|
import string
|
||||||
|
|
||||||
|
about_txt = """\
|
||||||
|
The validator used in this example will validate the input on the fly
|
||||||
|
instead of waiting until the okay button is pressed. The first field
|
||||||
|
will not allow digits to be typed, the second will allow anything
|
||||||
|
and the third will not allow alphabetic characters to be entered.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class CharValidator(wx.PyValidator):
|
||||||
|
def __init__(self, flag):
|
||||||
|
wx.PyValidator.__init__(self)
|
||||||
|
self.flag = flag
|
||||||
|
self.Bind(wx.EVT_CHAR, self.OnChar)
|
||||||
|
|
||||||
|
def Clone(self):
|
||||||
|
"""
|
||||||
|
Note that every validator must implement the Clone() method.
|
||||||
|
"""
|
||||||
|
return CharValidator(self.flag)
|
||||||
|
|
||||||
|
def Validate(self, win):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferToWindow(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def TransferFromWindow(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def OnChar(self, evt):
|
||||||
|
key = chr(evt.GetKeyCode())
|
||||||
|
if self.flag == "no-alpha" and key in string.letters:
|
||||||
|
return
|
||||||
|
if self.flag == "no-digit" and key in string.digits:
|
||||||
|
return
|
||||||
|
evt.Skip()
|
||||||
|
|
||||||
|
|
||||||
|
class MyDialog(wx.Dialog):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Dialog.__init__(self, None, -1, "Validators: behavior modification")
|
||||||
|
|
||||||
|
# Create the text controls
|
||||||
|
about = wx.StaticText(self, -1, about_txt)
|
||||||
|
name_l = wx.StaticText(self, -1, "Name:")
|
||||||
|
email_l = wx.StaticText(self, -1, "Email:")
|
||||||
|
phone_l = wx.StaticText(self, -1, "Phone:")
|
||||||
|
|
||||||
|
name_t = wx.TextCtrl(self, validator=CharValidator("no-digit"))
|
||||||
|
email_t = wx.TextCtrl(self, validator=CharValidator("any"))
|
||||||
|
phone_t = wx.TextCtrl(self, validator=CharValidator("no-alpha"))
|
||||||
|
|
||||||
|
# Use standard button IDs
|
||||||
|
okay = wx.Button(self, wx.ID_OK)
|
||||||
|
okay.SetDefault()
|
||||||
|
cancel = wx.Button(self, wx.ID_CANCEL)
|
||||||
|
|
||||||
|
# Layout with sizers
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
sizer.Add(about, 0, wx.ALL, 5)
|
||||||
|
sizer.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
fgs = wx.FlexGridSizer(3, 2, 5, 5)
|
||||||
|
fgs.Add(name_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(name_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(email_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(email_t, 0, wx.EXPAND)
|
||||||
|
fgs.Add(phone_l, 0, wx.ALIGN_RIGHT)
|
||||||
|
fgs.Add(phone_t, 0, wx.EXPAND)
|
||||||
|
fgs.AddGrowableCol(1)
|
||||||
|
sizer.Add(fgs, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
btns = wx.StdDialogButtonSizer()
|
||||||
|
btns.AddButton(okay)
|
||||||
|
btns.AddButton(cancel)
|
||||||
|
btns.Realize()
|
||||||
|
sizer.Add(btns, 0, wx.EXPAND|wx.ALL, 5)
|
||||||
|
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
sizer.Fit(self)
|
||||||
|
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
|
||||||
|
dlg = MyDialog()
|
||||||
|
dlg.ShowModal()
|
||||||
|
dlg.Destroy()
|
||||||
|
|
||||||
|
app.MainLoop()
|
39
wxPython/samples/wxPIA_book/Chapter-09/wizard.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import wx
|
||||||
|
import wx.wizard
|
||||||
|
|
||||||
|
class TitledPage(wx.wizard.WizardPageSimple):
|
||||||
|
def __init__(self, parent, title):
|
||||||
|
wx.wizard.WizardPageSimple.__init__(self, parent)
|
||||||
|
self.sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
self.SetSizer(self.sizer)
|
||||||
|
titleText = wx.StaticText(self, -1, title)
|
||||||
|
titleText.SetFont(
|
||||||
|
wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
|
||||||
|
self.sizer.Add(titleText, 0,
|
||||||
|
wx.ALIGN_CENTRE | wx.ALL, 5)
|
||||||
|
self.sizer.Add(wx.StaticLine(self, -1), 0,
|
||||||
|
wx.EXPAND | wx.ALL, 5)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
wizard = wx.wizard.Wizard(None, -1, "Simple Wizard")
|
||||||
|
page1 = TitledPage(wizard, "Page 1")
|
||||||
|
page2 = TitledPage(wizard, "Page 2")
|
||||||
|
page3 = TitledPage(wizard, "Page 3")
|
||||||
|
page4 = TitledPage(wizard, "Page 4")
|
||||||
|
page1.sizer.Add(wx.StaticText(page1, -1,
|
||||||
|
"Testing the wizard"))
|
||||||
|
page4.sizer.Add(wx.StaticText(page4, -1,
|
||||||
|
"This is the last page."))
|
||||||
|
wx.wizard.WizardPageSimple_Chain(page1, page2)
|
||||||
|
wx.wizard.WizardPageSimple_Chain(page2, page3)
|
||||||
|
wx.wizard.WizardPageSimple_Chain(page3, page4)
|
||||||
|
wizard.FitToPage(page1)
|
||||||
|
|
||||||
|
if wizard.RunWizard(page1):
|
||||||
|
print "Success"
|
||||||
|
|
||||||
|
wizard.Destroy()
|
||||||
|
|
||||||
|
|
||||||
|
|
50
wxPython/samples/wxPIA_book/Chapter-10/add_items.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Add Menu Items")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
self.txt = wx.TextCtrl(p, -1, "new item")
|
||||||
|
btn = wx.Button(p, -1, "Add Menu Item")
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnAddItem, btn)
|
||||||
|
|
||||||
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer.Add(self.txt, 0, wx.ALL, 20)
|
||||||
|
sizer.Add(btn, 0, wx.TOP|wx.RIGHT, 20)
|
||||||
|
p.SetSizer(sizer)
|
||||||
|
|
||||||
|
self.menu = menu = wx.Menu()
|
||||||
|
simple = menu.Append(-1, "Simple menu item")
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, simple)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnAddItem(self, event):
|
||||||
|
item = self.menu.Append(-1, self.txt.GetValue())
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnNewItemSelected, item)
|
||||||
|
|
||||||
|
def OnNewItemSelected(self, event):
|
||||||
|
wx.MessageBox("You selected a new item")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
22
wxPython/samples/wxPIA_book/Chapter-10/create_just_menu.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "Simple Menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu = wx.Menu()
|
||||||
|
menuBar.Append(menu, "Left Menu")
|
||||||
|
menu2 = wx.Menu()
|
||||||
|
menuBar.Append(menu2, "Middle Menu")
|
||||||
|
menu3 = wx.Menu()
|
||||||
|
menuBar.Append(menu3, "Right Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
29
wxPython/samples/wxPIA_book/Chapter-10/create_simple_menu.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "Simple Menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menu = wx.Menu()
|
||||||
|
simple = menu.Append(-1, "Simple menu item")
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, simple)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Simple Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
46
wxPython/samples/wxPIA_book/Chapter-10/disable_item.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
ID_SIMPLE = wx.NewId()
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Enable/Disable Menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
self.btn = wx.Button(p, -1, "Disable Item", (20,20))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnToggleItem, self.btn)
|
||||||
|
|
||||||
|
menu = wx.Menu()
|
||||||
|
menu.Append(ID_SIMPLE, "Simple menu item")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, id=ID_SIMPLE)
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
menu.Append(wx.ID_EXIT, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnToggleItem(self, event):
|
||||||
|
menubar = self.GetMenuBar()
|
||||||
|
enabled = menubar.IsEnabled(ID_SIMPLE)
|
||||||
|
menubar.Enable(ID_SIMPLE, not enabled)
|
||||||
|
self.btn.SetLabel(
|
||||||
|
(enabled and "Enable" or "Disable") + " Item")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
47
wxPython/samples/wxPIA_book/Chapter-10/fancy_items.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Fancier Menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menu = wx.Menu()
|
||||||
|
|
||||||
|
bmp = wx.Bitmap("open.png", wx.BITMAP_TYPE_PNG)
|
||||||
|
item = wx.MenuItem(menu, -1, "Has Open Bitmap")
|
||||||
|
item.SetBitmap(bmp)
|
||||||
|
menu.AppendItem(item)
|
||||||
|
|
||||||
|
if True or 'wxMSW' in wx.PlatformInfo:
|
||||||
|
font = wx.SystemSettings.GetFont(
|
||||||
|
wx.SYS_DEFAULT_GUI_FONT)
|
||||||
|
font.SetWeight(wx.BOLD)
|
||||||
|
item = wx.MenuItem(menu, -1, "Has Bold Font")
|
||||||
|
item.SetFont(font)
|
||||||
|
menu.AppendItem(item)
|
||||||
|
|
||||||
|
item = wx.MenuItem(menu, -1, "Has Red Text")
|
||||||
|
item.SetTextColour("red")
|
||||||
|
menu.AppendItem(item)
|
||||||
|
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
52
wxPython/samples/wxPIA_book/Chapter-10/find_item.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Find Item Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
self.txt = wx.TextCtrl(p, -1, "new item")
|
||||||
|
btn = wx.Button(p, -1, "Add Menu Item")
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnAddItem, btn)
|
||||||
|
|
||||||
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer.Add(self.txt, 0, wx.ALL, 20)
|
||||||
|
sizer.Add(btn, 0, wx.TOP|wx.RIGHT, 20)
|
||||||
|
p.SetSizer(sizer)
|
||||||
|
|
||||||
|
self.menu = menu = wx.Menu()
|
||||||
|
simple = menu.Append(-1, "Simple menu item")
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, simple)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnAddItem(self, event):
|
||||||
|
item = self.menu.Append(-1, self.txt.GetValue())
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnNewItemSelected, item)
|
||||||
|
|
||||||
|
def OnNewItemSelected(self, event):
|
||||||
|
item = self.GetMenuBar().FindItemById(event.GetId())
|
||||||
|
text = item.GetText()
|
||||||
|
wx.MessageBox("You selected the '%s' item" % text)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
BIN
wxPython/samples/wxPIA_book/Chapter-10/open.png
Normal file
After Width: | Height: | Size: 281 B |
49
wxPython/samples/wxPIA_book/Chapter-10/popupmenu.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Popup Menu Example")
|
||||||
|
self.panel = p = wx.Panel(self)
|
||||||
|
menu = wx.Menu()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
wx.StaticText(p, -1,
|
||||||
|
"Right-click on the panel to show a popup menu",
|
||||||
|
(25,25))
|
||||||
|
|
||||||
|
self.popupmenu = wx.Menu()
|
||||||
|
for text in "one two three four five".split():
|
||||||
|
item = self.popupmenu.Append(-1, text)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item)
|
||||||
|
p.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)
|
||||||
|
|
||||||
|
|
||||||
|
def OnShowPopup(self, event):
|
||||||
|
pos = event.GetPosition()
|
||||||
|
pos = self.panel.ScreenToClient(pos)
|
||||||
|
self.panel.PopupMenu(self.popupmenu, pos)
|
||||||
|
|
||||||
|
|
||||||
|
def OnPopupItemSelected(self, event):
|
||||||
|
item = self.popupmenu.FindItemById(event.GetId())
|
||||||
|
text = item.GetText()
|
||||||
|
wx.MessageBox("You selected item '%s'" % text)
|
||||||
|
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
34
wxPython/samples/wxPIA_book/Chapter-10/sub_menu.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Sub-menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menu = wx.Menu()
|
||||||
|
|
||||||
|
submenu = wx.Menu()
|
||||||
|
submenu.Append(-1, "Sub-item 1")
|
||||||
|
submenu.Append(-1, "Sub-item 2")
|
||||||
|
menu.AppendMenu(-1, "Sub-menu", submenu)
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
36
wxPython/samples/wxPIA_book/Chapter-10/toggle_items.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Toggle Items Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menu = wx.Menu()
|
||||||
|
exit = menu.Append(-1, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
|
||||||
|
menu = wx.Menu()
|
||||||
|
menu.AppendCheckItem(-1, "Check Item 1")
|
||||||
|
menu.AppendCheckItem(-1, "Check Item 2")
|
||||||
|
menu.AppendCheckItem(-1, "Check Item 3")
|
||||||
|
menu.AppendSeparator()
|
||||||
|
menu.AppendRadioItem(-1, "Radio Item 1")
|
||||||
|
menu.AppendRadioItem(-1, "Radio Item 2")
|
||||||
|
menu.AppendRadioItem(-1, "Radio Item 3")
|
||||||
|
menuBar.Append(menu, "Toggle Items")
|
||||||
|
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
49
wxPython/samples/wxPIA_book/Chapter-10/update_ui.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
ID_SIMPLE = wx.NewId()
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"UPDATE_UI Menu Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
self.btn = wx.Button(p, -1, "Disable Item", (20,20))
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnToggleItem, self.btn)
|
||||||
|
|
||||||
|
menu = wx.Menu()
|
||||||
|
menu.Append(ID_SIMPLE, "Simple menu item")
|
||||||
|
self.enabled = True
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, id=ID_SIMPLE)
|
||||||
|
self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateSimple, id=ID_SIMPLE)
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
menu.Append(wx.ID_EXIT, "Exit")
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def OnToggleItem(self, event):
|
||||||
|
self.btn.SetLabel(
|
||||||
|
(self.enabled and "Enable" or "Disable") + " Item")
|
||||||
|
self.enabled = not self.enabled
|
||||||
|
|
||||||
|
def OnUpdateSimple(self, event):
|
||||||
|
event.Enable(self.enabled)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
47
wxPython/samples/wxPIA_book/Chapter-10/with_accelerator.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class MyFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1,
|
||||||
|
"Accelerator Example")
|
||||||
|
p = wx.Panel(self)
|
||||||
|
menu = wx.Menu()
|
||||||
|
simple = menu.Append(-1, "Simple &menu item") # with mnemonic
|
||||||
|
accel = menu.Append(-1, "&Accelerated\tCtrl-A") # with accelerator
|
||||||
|
|
||||||
|
menu.AppendSeparator()
|
||||||
|
exit = menu.Append(-1, "E&xit")
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnSimple, simple)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnAccelerated, accel)
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnExit, exit)
|
||||||
|
|
||||||
|
menuBar = wx.MenuBar()
|
||||||
|
menuBar.Append(menu, "&Menu")
|
||||||
|
self.SetMenuBar(menuBar)
|
||||||
|
|
||||||
|
# An alternate way to make accelerators
|
||||||
|
acceltbl = wx.AcceleratorTable( [
|
||||||
|
(wx.ACCEL_CTRL, ord('Q'), exit.GetId())
|
||||||
|
])
|
||||||
|
self.SetAcceleratorTable(acceltbl)
|
||||||
|
|
||||||
|
|
||||||
|
def OnSimple(self, event):
|
||||||
|
wx.MessageBox("You selected the simple menu item")
|
||||||
|
|
||||||
|
def OnAccelerated(self, event):
|
||||||
|
wx.MessageBox("You selected the accelerated menu item")
|
||||||
|
|
||||||
|
|
||||||
|
def OnExit(self, event):
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
frame = MyFrame()
|
||||||
|
frame.Show()
|
||||||
|
app.MainLoop()
|
||||||
|
|
||||||
|
|
20
wxPython/samples/wxPIA_book/Chapter-11/basicflexgridsizer.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import wx
|
||||||
|
from blockwindow import BlockWindow
|
||||||
|
|
||||||
|
labels = "one two three four five six seven eight nine".split()
|
||||||
|
|
||||||
|
class TestFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "FlexGridSizer")
|
||||||
|
sizer = wx.FlexGridSizer(rows=3, cols=3, hgap=5, vgap=5)
|
||||||
|
for label in labels:
|
||||||
|
bw = BlockWindow(self, label=label)
|
||||||
|
sizer.Add(bw, 0, 0)
|
||||||
|
center = self.FindWindowByName("five")
|
||||||
|
center.SetMinSize((150,50))
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
self.Fit()
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
TestFrame().Show()
|
||||||
|
app.MainLoop()
|
18
wxPython/samples/wxPIA_book/Chapter-11/basicgridsizer.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import wx
|
||||||
|
from blockwindow import BlockWindow
|
||||||
|
|
||||||
|
labels = "one two three four five six seven eight nine".split()
|
||||||
|
|
||||||
|
class GridSizerFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "Basic Grid Sizer")
|
||||||
|
sizer = wx.GridSizer(rows=3, cols=3, hgap=5, vgap=5)
|
||||||
|
for label in labels:
|
||||||
|
bw = BlockWindow(self, label=label)
|
||||||
|
sizer.Add(bw, 0, 0)
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
self.Fit()
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
GridSizerFrame().Show()
|
||||||
|
app.MainLoop()
|
20
wxPython/samples/wxPIA_book/Chapter-11/blockwindow.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class BlockWindow(wx.Panel):
|
||||||
|
def __init__(self, parent, ID=-1, label="",
|
||||||
|
pos=wx.DefaultPosition, size=(100, 25)):
|
||||||
|
wx.Panel.__init__(self, parent, ID, pos, size,
|
||||||
|
wx.RAISED_BORDER, label)
|
||||||
|
self.label = label
|
||||||
|
self.SetBackgroundColour("white")
|
||||||
|
self.SetMinSize(size)
|
||||||
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
|
|
||||||
|
def OnPaint(self, evt):
|
||||||
|
sz = self.GetClientSize()
|
||||||
|
dc = wx.PaintDC(self)
|
||||||
|
w,h = dc.GetTextExtent(self.label)
|
||||||
|
dc.SetFont(self.GetFont())
|
||||||
|
dc.DrawText(self.label, (sz.width-w)/2, (sz.height-h)/2)
|
||||||
|
|
||||||
|
|
23
wxPython/samples/wxPIA_book/Chapter-11/bordergridsizer.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import wx
|
||||||
|
from blockwindow import BlockWindow
|
||||||
|
|
||||||
|
labels = "one two three four five six seven eight nine".split()
|
||||||
|
flags = {"one": wx.BOTTOM, "two": wx.ALL, "three": wx.TOP,
|
||||||
|
"four": wx.LEFT, "five": wx.ALL, "six": wx.RIGHT,
|
||||||
|
"seven": wx.BOTTOM | wx.TOP, "eight": wx.ALL,
|
||||||
|
"nine": wx.LEFT | wx.RIGHT}
|
||||||
|
|
||||||
|
class TestFrame(wx.Frame):
|
||||||
|
def __init__(self):
|
||||||
|
wx.Frame.__init__(self, None, -1, "GridSizer Borders")
|
||||||
|
sizer = wx.GridSizer(rows=3, cols=3, hgap=5, vgap=5)
|
||||||
|
for label in labels:
|
||||||
|
bw = BlockWindow(self, label=label)
|
||||||
|
flag = flags.get(label, 0)
|
||||||
|
sizer.Add(bw, 0, flag, 10)
|
||||||
|
self.SetSizer(sizer)
|
||||||
|
self.Fit()
|
||||||
|
|
||||||
|
app = wx.PySimpleApp()
|
||||||
|
TestFrame().Show()
|
||||||
|
app.MainLoop()
|