SetBestFittingSize --> SetInitialSize SetBestSize --> SetInitialSize SetInitialBestSize --> SetInitialSize git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42816 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			362 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			362 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
 | |
| 
 | |
| 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.SetInitialSize()
 | |
|         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()
 |