import wx testItems = [ "", "BitmapButton", "Button", "CalendarCtrl", "CheckBox", "CheckListBox", "Choice", "ComboBox", "Gauge", "GenericDirCtrl", "ListBox", "ListCtrl", "ListCtrl With GridLines", "RadioBox", "RadioButton", "ScrollBar", "Slider", "SpinButton", "SpinCtrl", "StaticBitmap", "StaticBox", "StaticLine", "StaticText", "TextCtrl", "ToggleButton", "TreeCtrl", "--------------", "Panel", "Panel With Border", "Panel With BG", "Panel With Controls", "Panel With RadioBox", "--------------", "GenericButton", ] import keyword testChoices = keyword.kwlist testChoices2 = "one two three four five six seven eight nine".split() class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="Draw Widget Test") self.left = wx.Panel(self) self.right = DisplayPanel(self) self.widget = None sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.left, 1, wx.EXPAND) sizer.Add(self.right, 1, wx.EXPAND) self.SetSizer(sizer) menu = wx.Menu() menu.Append(wx.ID_EXIT, "E&xit\tAlt-X") self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) mbar = wx.MenuBar() mbar.Append(menu, "&File") self.SetMenuBar(mbar) cb = wx.ComboBox(self.left, -1, pos=(20,20), choices=testItems, style=wx.CB_READONLY) self.Bind(wx.EVT_COMBOBOX, self.OnWidgetChosen, cb) def OnWidgetChosen(self, evt): item = evt.GetString() item = item.replace(" ", "_") func = getattr(self, "Test"+item, None) if func is not None: func(self.left) def OnExit(self, evt): self.Close() def DoWidget(self, widget): self.right.Empty() if self.widget is not None: self.widget.Destroy() self.widget = widget if widget is None: return visiblePos = (20,80) hiddenPos = (-1000,-1000) widget.SetPosition(visiblePos) widget.Update() self.GetBMP(0) # Uses just a DC.Blit, so it must be visible # the rest should work when the widget is not visible. widget.SetPosition(hiddenPos) widget.Update() self.Update() ##self.GetBMP(1) self.GetBMP(2) ##self.GetBMP(4) # make it visible again for the user to compare widget.SetPosition(visiblePos) def GetBMP(self, method): w = self.widget maskClr = wx.Colour(12, 34, 56) sz = w.GetSize() bmp = wx.EmptyBitmap(sz.width, sz.height) dc = wx.MemoryDC() dc.SelectObject(bmp) dc.SetBackground(wx.Brush(maskClr)) dc.Clear() if method == 0: wdc = wx.WindowDC(w) dc.Blit(0,0, sz.width, sz.height, wdc, 0, 0) else: ##wx.DrawWindowOnDC(w, dc, method) wx.DrawWindowOnDC(w, dc) dc.SelectObject(wx.NullBitmap) bmp.SetMaskColour(maskClr) self.right.SetBMP(bmp, method) def Test(self, p): self.DoWidget(None) def TestBitmapButton(self, p): self.DoWidget(wx.BitmapButton(p, -1, wx.Bitmap("image.png"))) def TestButton(self, p): self.DoWidget(wx.Button(p, -1, "A button")) def TestCalendarCtrl(self, p): import wx.calendar w = wx.calendar.CalendarCtrl(p, style=wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) self.DoWidget(w) def TestCheckBox(self, p): self.DoWidget(wx.CheckBox(p, -1, "checkbox")) def TestCheckListBox(self, p): w = wx.CheckListBox(p, -1, choices=testChoices) w.SetSelection(2) self.DoWidget(w) def TestChoice(self, p): w = wx.Choice(p, -1, choices=testChoices) w.SetSelection(2) self.DoWidget(w) def TestComboBox(self, p): w = wx.ComboBox(p, -1, choices=testChoices) w.SetSelection(2) self.DoWidget(w) def TestGauge(self, p): w = wx.Gauge(p, -1, 100, size=(150, -1)) w.SetValue(65) self.DoWidget(w) def TestGenericDirCtrl(self, p): w = wx.GenericDirCtrl(p, size=(150,200), style=wx.DIRCTRL_DIR_ONLY) self.DoWidget(w) def TestListBox(self, p): w = wx.ListBox(p, -1, choices=testChoices) w.SetSelection(2) self.DoWidget(w) def TestListCtrl(self, p, useGridLines=False): style=wx.LC_REPORT if useGridLines: style = style | wx.LC_HRULES | wx.LC_VRULES w = wx.ListCtrl(p, -1, size=(250, 100), style=style) w.InsertColumn(0, "Col 1") w.InsertColumn(1, "Col 2") w.InsertColumn(2, "Col 3") for x in range(10): w.InsertStringItem(x, str(x)) w.SetStringItem(x, 1, str(x)) w.SetStringItem(x, 2, str(x)) self.DoWidget(w) def TestListCtrl_With_GridLines(self, p): self.TestListCtrl(p, True) def TestRadioBox(self, p): w = wx.RadioBox(p, -1, "RadioBox", choices=testChoices2, majorDimension=3) self.DoWidget(w) def TestRadioButton(self, p): self.DoWidget(wx.RadioButton(p, -1, "RadioButton")) def TestScrollBar(self, p): w = wx.ScrollBar(p, -1, size=(150,-1)) w.SetScrollbar(25, 5, 100, 10) self.DoWidget(w) def TestSlider(self, p): w = wx.Slider(p, -1, size=(150,-1)) self.DoWidget(w) def TestSpinButton(self, p): w = wx.SpinButton(p, -1) self.DoWidget(w) def TestSpinCtrl(self, p): w = wx.SpinCtrl(p, -1) self.DoWidget(w) def TestStaticBitmap(self, p): w = wx.StaticBitmap(p, -1, wx.Bitmap("image.png")) self.DoWidget(w) def TestStaticBox(self, p): w = wx.StaticBox(p, -1, "StaticBox", size=(150,75)) self.DoWidget(w) def TestStaticLine(self, p): w = wx.StaticLine(p, -1, size=(150,-1)) self.DoWidget(w) def TestStaticText(self, p): w = wx.StaticText(p, -1, "This is a wx.StaticText") self.DoWidget(w) def TestTextCtrl(self, p): self.DoWidget(wx.TextCtrl(p, -1, "This is a TextCtrl", size=(150,-1))) def TestToggleButton(self, p): w = wx.ToggleButton(p, -1, "Toggle Button") self.DoWidget(w) def TestTreeCtrl(self, p): w = wx.TreeCtrl(p, -1, size=(150,200)) root = w.AddRoot("The Root Item") for x in range(15): child = w.AppendItem(root, "Item %d" % x) w.Expand(root) self.DoWidget(w) def TestPanel(self, p): w = wx.Panel(p, size=(100,100)) self.DoWidget(w) def TestPanel_With_Border(self, p): w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) self.DoWidget(w) def TestPanel_With_BG(self, p): w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) w.SetBackgroundColour("pink") self.DoWidget(w) def TestPanel_With_Controls(self, p): w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) l1 = wx.StaticText(w, -1, "Name:") l2 = wx.StaticText(w, -1, "Email:") t1 = wx.TextCtrl(w, -1, "", size=(120,-1)) t2 = wx.TextCtrl(w, -1, "", size=(120,-1)) btn = wx.Button(w, wx.ID_OK) sizer = wx.BoxSizer(wx.VERTICAL) fgs = wx.FlexGridSizer(2,2,5,5) fgs.Add(l1) fgs.Add(t1) fgs.Add(l2) fgs.Add(t2) sizer.Add(fgs, 0, wx.ALL, 10) sizer.Add(btn, 0, wx.ALL, 10) w.SetSizerAndFit(sizer) self.DoWidget(w) def TestPanel_With_RadioBox(self, p): w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) wx.RadioBox(w, -1, "RadioBox", pos=(10,10), choices=testChoices2, majorDimension=3) w.Fit() self.DoWidget(w) def TestGenericButton(self, p): import wx.lib.buttons as b w = b.GenButton(p, -1, "Generic Button") w.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False)) w.SetBezelWidth(5) w.SetBestSize() w.SetBackgroundColour("Navy") w.SetForegroundColour(wx.WHITE) self.DoWidget(w) def TestT(self, p): self.DoWidget(w) def TestT(self, p): self.DoWidget(w) def TestT(self, p): self.DoWidget(w) def TestT(self, p): self.DoWidget(w) class DisplayPanel(wx.Panel): def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID) self.SetBackgroundColour("sky blue") self.Empty() self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB) def Empty(self): self.bmps = [None] * 5 self.Refresh() def SetBMP(self, bmp, method): self.bmps[method] = bmp self.Refresh() def OEB(self, evt): None def OnPaint(self, evt): dc = wx.BufferedPaintDC(self) dc.SetBackground(wx.Brush(self.GetBackgroundColour())) dc.Clear() y = 25 for idx, bmp in enumerate(self.bmps): if bmp is not None: dc.DrawText(str(idx), 15, y) dc.DrawBitmap(bmp, 30,y, True) y += bmp.GetHeight() + 15 app = wx.App(False) f = Frame() f.SetSize((600,600)) f.Show() app.MainLoop()