#----------------------------------------------------------------------------
-from wxPython import *
+from wxPython.wx import *
+import time
#---------------------------------------------------------------------------
EVT_TEXT(self, 10, self.EvtText)
y_pos = y_pos + delta
- wxCheckBox(self, 20, "wxCheckBox", wxPoint(80, y_pos), wxSize(150, 20))
+ wxCheckBox(self, 20, "wxCheckBox", wxPoint(80, y_pos), wxSize(150, 20), wxNO_BORDER)
EVT_CHECKBOX(self, 20, self.EvtCheckBox)
y_pos = y_pos + delta
rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(80, y_pos), wxPyDefaultSize,
- sampleList, 3, wxRA_HORIZONTAL)
+ sampleList, 3, wxRA_HORIZONTAL| wxNO_BORDER)
EVT_RADIOBOX(self, 30, self.EvtRadioBox)
- width, height = rb.GetSize()
+ width, height = rb.GetSizeTuple()
y_pos = y_pos + height + 5
wxStaticText(self, -1, "wxChoice", wxPoint(5, y_pos), wxSize(75, 20))
EVT_LISTBOX(self, 60, self.EvtListBox)
EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
lb.SetSelection(0)
- width, height = lb.GetSize()
+ width, height = lb.GetSizeTuple()
y_pos = y_pos + height + 5
#---------------------------------------------------------------------------
class TestGrid(wxFrame):
- def __init__(self, parent):
+ def __init__(self, parent, log):
wxFrame.__init__(self, parent, -1, 'Test Grid',
wxPyDefaultPosition, wxSize(500, 300))
+ self.log = log
grid = wxGrid(self, -1)
grid.UpdateDimensions()
grid.AdjustScrollbars()
+ EVT_GRID_SELECT_CELL(grid, self.OnSelectCell)
+ EVT_GRID_CELL_CHANGE(grid, self.OnCellChange)
+ EVT_GRID_CELL_LCLICK(grid, self.OnCellClick)
+ EVT_GRID_LABEL_LCLICK(grid, self.OnLabelClick)
+
+
def OnCloseWindow(self, event):
self.Destroy()
+ def OnSelectCell(self, event):
+ self.log.WriteText("OnSelectCell: (%d, %d)\n" % (event.m_row, event.m_col))
+
+ def OnCellChange(self, event):
+ self.log.WriteText("OnCellChange: (%d, %d)\n" % (event.m_row, event.m_col))
+
+ def OnCellClick(self, event):
+ self.log.WriteText("OnCellClick: (%d, %d)\n" % (event.m_row, event.m_col))
+
+ def OnLabelClick(self, event):
+ self.log.WriteText("OnLabelClick: (%d, %d)\n" % (event.m_row, event.m_col))
#---------------------------------------------------------------------------
+
+class ColoredPanel(wxWindow):
+ def __init__(self, parent, color):
+ wxWindow.__init__(self, parent, -1,
+ wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
+ self.SetBackgroundColour(color)
+
+
class TestNotebookWindow(wxFrame):
- def __init__(self, parent):
+ def __init__(self, parent, log):
wxFrame.__init__(self, parent, -1, 'Test wxNotebook',
wxPyDefaultPosition, wxPyDefaultSize)
nb = wxNotebook(self, -1)
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxBLUE)
+ win = ColoredPanel(nb, wxBLUE)
nb.AddPage(win, "Blue")
-
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxRED)
+ st = wxStaticText(win, -1,
+ "You can put nearly any type of window here!",
+ wxPoint(10, 10))
+ st.SetForegroundColour(wxWHITE)
+ st.SetBackgroundColour(wxBLUE)
+ st = wxStaticText(win, -1,
+ "Check the next tab for an example...",
+ wxPoint(10, 30))
+ st.SetForegroundColour(wxWHITE)
+ st.SetBackgroundColour(wxBLUE)
+
+ win = TestTreeCtrlPanel(nb, log)
+ nb.AddPage(win, "TreeCtrl")
+
+ win = ColoredPanel(nb, wxRED)
nb.AddPage(win, "Red")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxGREEN)
+ win = ColoredPanel(nb, wxGREEN)
nb.AddPage(win, "Green")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxCYAN)
+ win = ColoredPanel(nb, wxCYAN)
nb.AddPage(win, "Cyan")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxWHITE)
+ win = ColoredPanel(nb, wxWHITE)
nb.AddPage(win, "White")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxBLACK)
+ win = ColoredPanel(nb, wxBLACK)
nb.AddPage(win, "Black")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxNamedColour('MIDNIGHT BLUE'))
+ win = ColoredPanel(nb, wxNamedColour('MIDNIGHT BLUE'))
nb.AddPage(win, "MIDNIGHT BLUE")
- win = wxWindow(nb, -1, wxPyDefaultPosition, wxPyDefaultSize, wxRAISED_BORDER)
- win.SetBackgroundColour(wxNamedColour('INDIAN RED'))
+ win = ColoredPanel(nb, wxNamedColour('INDIAN RED'))
nb.AddPage(win, "INDIAN RED")
nb.SetSelection(0)
- self.SetSize(wxSize(500, 300)) # force a redraw so the notebook will draw
+ self.SetSize(wxSize(350, 300)) # force a redraw so the notebook will draw
+
+
+ def OnCloseWindow(self, event):
+ self.Destroy()
+
+#---------------------------------------------------------------------------
+
+class TestSplitterWindow(wxFrame):
+ def __init__(self, parent):
+ wxFrame.__init__(self, parent, -1, 'Test wxSplitterWindow',
+ wxPyDefaultPosition, wxSize(500, 300))
+
+ splitter = wxSplitterWindow(self, -1)
+
+ p1 = ColoredPanel(splitter, wxRED)
+ wxStaticText(p1, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED)
+
+ p2 = ColoredPanel(splitter, wxBLUE)
+ wxStaticText(p2, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE)
+
+ splitter.SplitVertically(p1, p2)
+
+
+ def OnCloseWindow(self, event):
+ self.Destroy()
+
+
+#---------------------------------------------------------------------------
+
+class CustomStatusBar(wxStatusBar):
+ def __init__(self, parent):
+ wxStatusBar.__init__(self, parent, -1)
+ self.SetFieldsCount(3)
+
+ self.SetStatusText("A Custom StatusBar...", 0)
+
+ self.cb = wxCheckBox(self, 1001, "toggle clock")
+ EVT_CHECKBOX(self, 1001, self.OnToggleClock)
+ self.cb.SetValue(true)
+
+ # figure out how tall to make it.
+ dc = wxClientDC(self)
+ dc.SetFont(self.GetFont())
+ (w,h, d,e) = dc.GetTextExtent('X')
+ h = int(h * 1.8)
+ self.SetSize(wxSize(100, h))
+
+ # start our timer
+ self.timer = wxPyTimer(self.Notify)
+ self.timer.Start(1000)
+ self.Notify()
+
+
+ # Time-out handler
+ def Notify(self):
+ t = time.localtime(time.time())
+ st = time.strftime("%d-%b-%Y %I:%M:%S", t)
+ self.SetStatusText(st, 2)
+
+ # the checkbox was clicked
+ def OnToggleClock(self, event):
+ if self.cb.GetValue():
+ self.timer.Start(1000)
+ self.Notify()
+ else:
+ self.timer.Stop()
+
+ # reposition the checkbox
+ def OnSize(self, event):
+ rect = self.GetFieldRect(1)
+ print "%s, %s" % (rect.x, rect.y)
+ self.cb.SetPosition(wxPoint(rect.x+2, rect.y+2))
+ self.cb.SetSize(wxSize(rect.width-4, rect.height-4))
+
+
+
+class TestCustomStatusBar(wxFrame):
+ def __init__(self, parent):
+ wxFrame.__init__(self, parent, -1, 'Test Custom StatusBar',
+ wxPyDefaultPosition, wxSize(500, 300))
+ wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
+
+ self.sb = CustomStatusBar(self)
+ self.SetStatusBar(self.sb)
+
+ def OnCloseWindow(self, event):
+ self.sb.timer.Stop()
+ self.Destroy()
+
+
+#---------------------------------------------------------------------------
+
+class TestToolBar(wxFrame):
+ def __init__(self, parent, log):
+ wxFrame.__init__(self, parent, -1, 'Test ToolBar',
+ wxPyDefaultPosition, wxSize(500, 300))
+ self.log = log
+
+ wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
+
+ tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
+ #tb = wxToolBar(self, -1, wxPyDefaultPosition, wxPyDefaultSize,
+ # wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
+ #self.SetToolBar(tb)
+
+ tb.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp', wxBITMAP_TYPE_BMP),
+ NULL, false, -1, -1, "New")
+ EVT_TOOL(self, 10, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 10, self.OnToolRClick)
+
+ tb.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp', wxBITMAP_TYPE_BMP),
+ NULL, false, -1, -1, "Open")
+ EVT_TOOL(self, 20, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 20, self.OnToolRClick)
+
+ tb.AddSeparator()
+ tb.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp', wxBITMAP_TYPE_BMP),
+ NULL, false, -1, -1, "Copy")
+ EVT_TOOL(self, 30, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 30, self.OnToolRClick)
+
+ tb.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP),
+ NULL, false, -1, -1, "Paste")
+ EVT_TOOL(self, 40, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 40, self.OnToolRClick)
+
+ tb.AddSeparator()
+
+ tb.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
+ NULL, true, -1, -1, "Toggle this")
+ EVT_TOOL(self, 50, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 50, self.OnToolRClick)
+
+ tb.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
+ wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP),
+ true, -1, -1, "Toggle with 2 bitmaps")
+ EVT_TOOL(self, 60, self.OnToolClick)
+ EVT_TOOL_RCLICKED(self, 60, self.OnToolRClick)
+
+ tb.Realize()
def OnCloseWindow(self, event):
self.Destroy()
+ def OnToolClick(self, event):
+ self.log.WriteText("tool %s clicked\n" % event.GetId())
+
+ def OnToolRClick(self, event):
+ self.log.WriteText("tool %s right-clicked\n" % event.GetId())
+
+
+#---------------------------------------------------------------------------
+
+class TestTreeCtrlPanel(wxPanel):
+ def __init__(self, parent, log):
+ wxPanel.__init__(self, parent, -1)
+
+ self.log = log
+ tID = 1101
+
+ self.tree = wxTreeCtrl(self, tID)
+ root = self.tree.AddRoot("The Root Item")
+ for x in range(10):
+ child = self.tree.AppendItem(root, "Item %d" % x)
+ for y in range(5):
+ last = self.tree.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
+
+ self.tree.Expand(root)
+ EVT_TREE_ITEM_EXPANDED (self, tID, self.OnItemExpanded)
+ EVT_TREE_ITEM_COLLAPSED (self, tID, self.OnItemCollapsed)
+ EVT_TREE_SEL_CHANGED (self, tID, self.OnSelChanged)
+
+
+ def OnSize(self, event):
+ w,h = self.GetClientSizeTuple()
+ self.tree.SetDimensions(0, 0, w, h)
+
+
+ def OnItemExpanded(self, event):
+ item = event.GetItem()
+ self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))
+
+ def OnItemCollapsed(self, event):
+ item = event.GetItem()
+ self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
+
+ def OnSelChanged(self, event):
+ item = event.GetItem()
+ self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(item))
+
+
+
+
+class TestTreeCtrl(wxFrame):
+ def __init__(self, parent, log):
+ wxFrame.__init__(self, parent, -1, 'Test TreeCtrl',
+ wxPyDefaultPosition, wxSize(250, 300))
+
+ p = TestTreeCtrlPanel(self, log)
+
+
+#---------------------------------------------------------------------------
+#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
class AppFrame(wxFrame):
def __init__(self, parent, id, title):
wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
wxSize(420, 200))
- self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
- self.SetIcon(self.icon)
+ if wxPlatform == '__WXMSW__':
+ self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
+ self.SetIcon(self.icon)
self.mainmenu = wxMenuBar()
menu = wxMenu()
menu.Append(mID, '&Notebook')
EVT_MENU(self, mID, self.OnTestNotebook)
+ mID = NewId()
+ menu.Append(mID, '&Splitter Window')
+ EVT_MENU(self, mID, self.OnTestSplitter)
+
+ mID = NewId()
+ menu.Append(mID, '&Custom StatusBar')
+ EVT_MENU(self, mID, self.OnTestCustomStatusBar)
+
+ mID = NewId()
+ menu.Append(mID, '&ToolBar')
+ EVT_MENU(self, mID, self.OnTestToolBar)
+
+ mID = NewId()
+ menu.Append(mID, 'T&ree Control')
+ EVT_MENU(self, mID, self.OnTestTreeCtrl)
+
return menu
def WriteText(self, str):
self.log.WriteText(str)
- w, h = self.log.GetClientSize()
- numLines = h/self.charHeight
- x, y = self.log.PositionToXY(self.log.GetLastPosition())
- self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1))
+ if wxPlatform == '__WXMSW__':
+ w, h = self.log.GetClientSizeTuple()
+ numLines = h/self.charHeight
+ x, y = self.log.PositionToXY(self.log.GetLastPosition())
+ self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1))
def OnFileExit(self, event):
self.Close()
def OnTestSimpleControls(self, event):
dlg = TestSimpleControlsDlg(self, self)
- dlg.SetModal(true)
dlg.Centre()
- dlg.Show(true)
+ dlg.ShowModal()
dlg.Destroy()
def OnTestTimer(self, event):
win.Show(true)
def OnTestGrid(self, event):
- win = TestGrid(self)
+ win = TestGrid(self, self)
win.Show(true)
win.SetSize(wxSize(505, 300)) # have to force a resize, or the grid doesn't
# show up for some reason....
def OnTestNotebook(self, event):
- win = TestNotebookWindow(self)
+ win = TestNotebookWindow(self, self)
+ win.Show(true)
+
+ def OnTestSplitter(self, event):
+ win = TestSplitterWindow(self)
+ win.Show(true)
+
+ def OnTestCustomStatusBar(self, event):
+ win = TestCustomStatusBar(self)
+ win.Show(true)
+
+ def OnTestToolBar(self, event):
+ win = TestToolBar(self, self)
+ win.Show(true)
+
+ def OnTestTreeCtrl(self, event):
+ win = TestTreeCtrl(self, self)
win.Show(true)
+
#---------------------------------------------------------------------------
import pdb
pdb.run('main()')
+
+# for focused testing...
+def main2():
+ class T2App(wxApp):
+ def OnInit(self):
+ frame = TestLayoutConstraints(NULL)
+ frame.Show(true)
+ self.SetTopWindow(frame)
+ return true
+
+ app = T2App(0)
+ app.MainLoop()
+
+def t2():
+ import pdb
+ pdb.run('main2()')
+
+
+
if __name__ == '__main__':
main()
#----------------------------------------------------------------------------
#
# $Log$
+# Revision 1.10 1998/12/16 22:12:47 RD
+# Tweaks needed to be able to build wxPython with wxGTK.
+#
+# Revision 1.9 1998/12/15 20:44:35 RD
+# Changed the import semantics from "from wxPython import *" to "from
+# wxPython.wx import *" This is for people who are worried about
+# namespace pollution, they can use "from wxPython import wx" and then
+# prefix all the wxPython identifiers with "wx."
+#
+# Added wxTaskbarIcon for wxMSW.
+#
+# Made the events work for wxGrid.
+#
+# Added wxConfig.
+#
+# Added wxMiniFrame for wxGTK, (untested.)
+#
+# Changed many of the args and return values that were pointers to gdi
+# objects to references to reflect changes in the wxWindows API.
+#
+# Other assorted fixes and additions.
+#
+# Revision 1.8 1998/11/25 08:47:11 RD
+#
+# Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon
+# Added events for wxGrid
+# Other various fixes and additions
+#
+# Revision 1.7 1998/11/11 03:13:19 RD
+#
+# Additions for wxTreeCtrl
+#
+# Revision 1.6 1998/10/20 06:45:33 RD
+# New wxTreeCtrl wrappers (untested)
+# some changes in helpers
+# etc.
+#
+# Revision 1.5 1998/10/02 06:42:28 RD
+#
+# Version 0.4 of wxPython for MSW.
+#
+# Revision 1.4 1998/08/27 21:59:51 RD
+# Some chicken-and-egg problems solved for wxPython on wxGTK
+#
+# Revision 1.3 1998/08/27 00:01:17 RD
+# - more tweaks
+# - have discovered some problems but not yet discovered solutions...
+#
+# Revision 1.2 1998/08/22 19:51:18 RD
+# some tweaks for wxGTK
+#
# Revision 1.1 1998/08/09 08:28:05 RD
# Initial version
#