| 1 | |
| 2 | |
| 3 | import wx |
| 4 | |
| 5 | testItems = [ |
| 6 | "", |
| 7 | "BitmapButton", |
| 8 | "Button", |
| 9 | "CalendarCtrl", |
| 10 | "CheckBox", |
| 11 | "CheckListBox", |
| 12 | "Choice", |
| 13 | "ComboBox", |
| 14 | "Gauge", |
| 15 | "GenericDirCtrl", |
| 16 | "ListBox", |
| 17 | "ListCtrl", |
| 18 | "ListCtrl With GridLines", |
| 19 | "RadioBox", |
| 20 | "RadioButton", |
| 21 | "ScrollBar", |
| 22 | "Slider", |
| 23 | "SpinButton", |
| 24 | "SpinCtrl", |
| 25 | "StaticBitmap", |
| 26 | "StaticBox", |
| 27 | "StaticLine", |
| 28 | "StaticText", |
| 29 | "TextCtrl", |
| 30 | "ToggleButton", |
| 31 | "TreeCtrl", |
| 32 | "--------------", |
| 33 | "Panel", |
| 34 | "Panel With Border", |
| 35 | "Panel With BG", |
| 36 | "Panel With Controls", |
| 37 | "Panel With RadioBox", |
| 38 | "--------------", |
| 39 | "GenericButton", |
| 40 | |
| 41 | ] |
| 42 | |
| 43 | import keyword |
| 44 | testChoices = keyword.kwlist |
| 45 | |
| 46 | testChoices2 = "one two three four five six seven eight nine".split() |
| 47 | |
| 48 | |
| 49 | |
| 50 | |
| 51 | class Frame(wx.Frame): |
| 52 | def __init__(self): |
| 53 | wx.Frame.__init__(self, None, title="Draw Widget Test") |
| 54 | self.left = wx.Panel(self) |
| 55 | self.right = DisplayPanel(self) |
| 56 | self.widget = None |
| 57 | |
| 58 | sizer = wx.BoxSizer(wx.HORIZONTAL) |
| 59 | sizer.Add(self.left, 1, wx.EXPAND) |
| 60 | sizer.Add(self.right, 1, wx.EXPAND) |
| 61 | self.SetSizer(sizer) |
| 62 | |
| 63 | menu = wx.Menu() |
| 64 | menu.Append(wx.ID_EXIT, "E&xit\tAlt-X") |
| 65 | self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) |
| 66 | mbar = wx.MenuBar() |
| 67 | mbar.Append(menu, "&File") |
| 68 | self.SetMenuBar(mbar) |
| 69 | |
| 70 | cb = wx.ComboBox(self.left, -1, pos=(20,20), |
| 71 | choices=testItems, style=wx.CB_READONLY) |
| 72 | self.Bind(wx.EVT_COMBOBOX, self.OnWidgetChosen, cb) |
| 73 | |
| 74 | |
| 75 | def OnWidgetChosen(self, evt): |
| 76 | item = evt.GetString() |
| 77 | item = item.replace(" ", "_") |
| 78 | func = getattr(self, "Test"+item, None) |
| 79 | if func is not None: |
| 80 | func(self.left) |
| 81 | |
| 82 | def OnExit(self, evt): |
| 83 | self.Close() |
| 84 | |
| 85 | |
| 86 | |
| 87 | def DoWidget(self, widget): |
| 88 | self.right.Empty() |
| 89 | if self.widget is not None: |
| 90 | self.widget.Destroy() |
| 91 | self.widget = widget |
| 92 | if widget is None: |
| 93 | return |
| 94 | |
| 95 | visiblePos = (20,80) |
| 96 | hiddenPos = (-1000,-1000) |
| 97 | |
| 98 | widget.SetPosition(visiblePos) |
| 99 | widget.Update() |
| 100 | self.GetBMP(0) # Uses just a DC.Blit, so it must be visible |
| 101 | |
| 102 | # the rest should work when the widget is not visible. |
| 103 | widget.SetPosition(hiddenPos) |
| 104 | widget.Update() |
| 105 | self.Update() |
| 106 | |
| 107 | ##self.GetBMP(1) |
| 108 | self.GetBMP(2) |
| 109 | ##self.GetBMP(4) |
| 110 | |
| 111 | # make it visible again for the user to compare |
| 112 | widget.SetPosition(visiblePos) |
| 113 | |
| 114 | |
| 115 | def GetBMP(self, method): |
| 116 | w = self.widget |
| 117 | maskClr = wx.Colour(12, 34, 56) |
| 118 | sz = w.GetSize() |
| 119 | bmp = wx.EmptyBitmap(sz.width, sz.height) |
| 120 | dc = wx.MemoryDC() |
| 121 | dc.SelectObject(bmp) |
| 122 | dc.SetBackground(wx.Brush(maskClr)) |
| 123 | dc.Clear() |
| 124 | |
| 125 | if method == 0: |
| 126 | wdc = wx.WindowDC(w) |
| 127 | dc.Blit(0,0, sz.width, sz.height, wdc, 0, 0) |
| 128 | else: |
| 129 | ##wx.DrawWindowOnDC(w, dc, method) |
| 130 | wx.DrawWindowOnDC(w, dc) |
| 131 | |
| 132 | dc.SelectObject(wx.NullBitmap) |
| 133 | bmp.SetMaskColour(maskClr) |
| 134 | self.right.SetBMP(bmp, method) |
| 135 | |
| 136 | |
| 137 | |
| 138 | |
| 139 | |
| 140 | def Test(self, p): |
| 141 | self.DoWidget(None) |
| 142 | |
| 143 | def TestBitmapButton(self, p): |
| 144 | self.DoWidget(wx.BitmapButton(p, -1, |
| 145 | wx.Bitmap("image.png"))) |
| 146 | def TestButton(self, p): |
| 147 | self.DoWidget(wx.Button(p, -1, "A button")) |
| 148 | |
| 149 | def TestCalendarCtrl(self, p): |
| 150 | import wx.calendar |
| 151 | w = wx.calendar.CalendarCtrl(p, style=wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) |
| 152 | self.DoWidget(w) |
| 153 | |
| 154 | def TestCheckBox(self, p): |
| 155 | self.DoWidget(wx.CheckBox(p, -1, "checkbox")) |
| 156 | |
| 157 | def TestCheckListBox(self, p): |
| 158 | w = wx.CheckListBox(p, -1, choices=testChoices) |
| 159 | w.SetSelection(2) |
| 160 | self.DoWidget(w) |
| 161 | |
| 162 | def TestChoice(self, p): |
| 163 | w = wx.Choice(p, -1, choices=testChoices) |
| 164 | w.SetSelection(2) |
| 165 | self.DoWidget(w) |
| 166 | |
| 167 | def TestComboBox(self, p): |
| 168 | w = wx.ComboBox(p, -1, choices=testChoices) |
| 169 | w.SetSelection(2) |
| 170 | self.DoWidget(w) |
| 171 | |
| 172 | def TestGauge(self, p): |
| 173 | w = wx.Gauge(p, -1, 100, size=(150, -1)) |
| 174 | w.SetValue(65) |
| 175 | self.DoWidget(w) |
| 176 | |
| 177 | def TestGenericDirCtrl(self, p): |
| 178 | w = wx.GenericDirCtrl(p, size=(150,200), style=wx.DIRCTRL_DIR_ONLY) |
| 179 | self.DoWidget(w) |
| 180 | |
| 181 | def TestListBox(self, p): |
| 182 | w = wx.ListBox(p, -1, choices=testChoices) |
| 183 | w.SetSelection(2) |
| 184 | self.DoWidget(w) |
| 185 | |
| 186 | def TestListCtrl(self, p, useGridLines=False): |
| 187 | style=wx.LC_REPORT |
| 188 | if useGridLines: |
| 189 | style = style | wx.LC_HRULES | wx.LC_VRULES |
| 190 | w = wx.ListCtrl(p, -1, size=(250, 100), style=style) |
| 191 | w.InsertColumn(0, "Col 1") |
| 192 | w.InsertColumn(1, "Col 2") |
| 193 | w.InsertColumn(2, "Col 3") |
| 194 | for x in range(10): |
| 195 | w.InsertStringItem(x, str(x)) |
| 196 | w.SetStringItem(x, 1, str(x)) |
| 197 | w.SetStringItem(x, 2, str(x)) |
| 198 | self.DoWidget(w) |
| 199 | |
| 200 | def TestListCtrl_With_GridLines(self, p): |
| 201 | self.TestListCtrl(p, True) |
| 202 | |
| 203 | def TestRadioBox(self, p): |
| 204 | w = wx.RadioBox(p, -1, "RadioBox", |
| 205 | choices=testChoices2, majorDimension=3) |
| 206 | self.DoWidget(w) |
| 207 | |
| 208 | def TestRadioButton(self, p): |
| 209 | self.DoWidget(wx.RadioButton(p, -1, "RadioButton")) |
| 210 | |
| 211 | def TestScrollBar(self, p): |
| 212 | w = wx.ScrollBar(p, -1, size=(150,-1)) |
| 213 | w.SetScrollbar(25, 5, 100, 10) |
| 214 | self.DoWidget(w) |
| 215 | |
| 216 | def TestSlider(self, p): |
| 217 | w = wx.Slider(p, -1, size=(150,-1)) |
| 218 | self.DoWidget(w) |
| 219 | |
| 220 | def TestSpinButton(self, p): |
| 221 | w = wx.SpinButton(p, -1) |
| 222 | self.DoWidget(w) |
| 223 | |
| 224 | def TestSpinCtrl(self, p): |
| 225 | w = wx.SpinCtrl(p, -1) |
| 226 | self.DoWidget(w) |
| 227 | |
| 228 | def TestStaticBitmap(self, p): |
| 229 | w = wx.StaticBitmap(p, -1, wx.Bitmap("image.png")) |
| 230 | self.DoWidget(w) |
| 231 | |
| 232 | def TestStaticBox(self, p): |
| 233 | w = wx.StaticBox(p, -1, "StaticBox", size=(150,75)) |
| 234 | self.DoWidget(w) |
| 235 | |
| 236 | def TestStaticLine(self, p): |
| 237 | w = wx.StaticLine(p, -1, size=(150,-1)) |
| 238 | self.DoWidget(w) |
| 239 | |
| 240 | def TestStaticText(self, p): |
| 241 | w = wx.StaticText(p, -1, "This is a wx.StaticText") |
| 242 | self.DoWidget(w) |
| 243 | |
| 244 | def TestTextCtrl(self, p): |
| 245 | self.DoWidget(wx.TextCtrl(p, -1, "This is a TextCtrl", size=(150,-1))) |
| 246 | |
| 247 | def TestToggleButton(self, p): |
| 248 | w = wx.ToggleButton(p, -1, "Toggle Button") |
| 249 | self.DoWidget(w) |
| 250 | |
| 251 | def TestTreeCtrl(self, p): |
| 252 | w = wx.TreeCtrl(p, -1, size=(150,200)) |
| 253 | root = w.AddRoot("The Root Item") |
| 254 | for x in range(15): |
| 255 | child = w.AppendItem(root, "Item %d" % x) |
| 256 | w.Expand(root) |
| 257 | self.DoWidget(w) |
| 258 | |
| 259 | def TestPanel(self, p): |
| 260 | w = wx.Panel(p, size=(100,100)) |
| 261 | self.DoWidget(w) |
| 262 | |
| 263 | def TestPanel_With_Border(self, p): |
| 264 | w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) |
| 265 | self.DoWidget(w) |
| 266 | |
| 267 | def TestPanel_With_BG(self, p): |
| 268 | w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) |
| 269 | w.SetBackgroundColour("pink") |
| 270 | self.DoWidget(w) |
| 271 | |
| 272 | def TestPanel_With_Controls(self, p): |
| 273 | w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) |
| 274 | l1 = wx.StaticText(w, -1, "Name:") |
| 275 | l2 = wx.StaticText(w, -1, "Email:") |
| 276 | t1 = wx.TextCtrl(w, -1, "", size=(120,-1)) |
| 277 | t2 = wx.TextCtrl(w, -1, "", size=(120,-1)) |
| 278 | btn = wx.Button(w, wx.ID_OK) |
| 279 | sizer = wx.BoxSizer(wx.VERTICAL) |
| 280 | fgs = wx.FlexGridSizer(2,2,5,5) |
| 281 | fgs.Add(l1) |
| 282 | fgs.Add(t1) |
| 283 | fgs.Add(l2) |
| 284 | fgs.Add(t2) |
| 285 | sizer.Add(fgs, 0, wx.ALL, 10) |
| 286 | sizer.Add(btn, 0, wx.ALL, 10) |
| 287 | w.SetSizerAndFit(sizer) |
| 288 | self.DoWidget(w) |
| 289 | |
| 290 | def TestPanel_With_RadioBox(self, p): |
| 291 | w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER) |
| 292 | wx.RadioBox(w, -1, "RadioBox", pos=(10,10), |
| 293 | choices=testChoices2, majorDimension=3) |
| 294 | w.Fit() |
| 295 | self.DoWidget(w) |
| 296 | |
| 297 | def TestGenericButton(self, p): |
| 298 | import wx.lib.buttons as b |
| 299 | w = b.GenButton(p, -1, "Generic Button") |
| 300 | w.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False)) |
| 301 | w.SetBezelWidth(5) |
| 302 | w.SetInitialSize() |
| 303 | w.SetBackgroundColour("Navy") |
| 304 | w.SetForegroundColour(wx.WHITE) |
| 305 | self.DoWidget(w) |
| 306 | |
| 307 | def TestT(self, p): |
| 308 | self.DoWidget(w) |
| 309 | |
| 310 | def TestT(self, p): |
| 311 | self.DoWidget(w) |
| 312 | |
| 313 | def TestT(self, p): |
| 314 | self.DoWidget(w) |
| 315 | |
| 316 | def TestT(self, p): |
| 317 | self.DoWidget(w) |
| 318 | |
| 319 | |
| 320 | |
| 321 | |
| 322 | |
| 323 | |
| 324 | |
| 325 | class DisplayPanel(wx.Panel): |
| 326 | def __init__(self, parent, ID=-1): |
| 327 | wx.Panel.__init__(self, parent, ID) |
| 328 | self.SetBackgroundColour("sky blue") |
| 329 | self.Empty() |
| 330 | self.Bind(wx.EVT_PAINT, self.OnPaint) |
| 331 | self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB) |
| 332 | |
| 333 | def Empty(self): |
| 334 | self.bmps = [None] * 5 |
| 335 | self.Refresh() |
| 336 | |
| 337 | def SetBMP(self, bmp, method): |
| 338 | self.bmps[method] = bmp |
| 339 | self.Refresh() |
| 340 | |
| 341 | def OEB(self, evt): |
| 342 | None |
| 343 | |
| 344 | def OnPaint(self, evt): |
| 345 | dc = wx.BufferedPaintDC(self) |
| 346 | dc.SetBackground(wx.Brush(self.GetBackgroundColour())) |
| 347 | dc.Clear() |
| 348 | y = 25 |
| 349 | for idx, bmp in enumerate(self.bmps): |
| 350 | if bmp is not None: |
| 351 | dc.DrawText(str(idx), 15, y) |
| 352 | dc.DrawBitmap(bmp, 30,y, True) |
| 353 | y += bmp.GetHeight() + 15 |
| 354 | |
| 355 | |
| 356 | |
| 357 | app = wx.App(False) |
| 358 | f = Frame() |
| 359 | f.SetSize((600,600)) |
| 360 | f.Show() |
| 361 | app.MainLoop() |