-# 11/13/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o Updated for wx namespace
-# o Replaced deprecated whrandom with random module.
-#
-# 11/13/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o Currently uses lib.newevent; should probably be updated to use
-# new-style event binder. OTOH, this is the only place we get
-# to see that library used that I know of.
-#
import random
import time
def Run(self):
while self.keepGoing:
evt = UpdateBarEvent(barNum = self.barNum, value = int(self.val))
- wx.PostEvent(self.win.GetEventHandler(), evt)
- #del evt
-
+ wx.PostEvent(self.win, evt)
+
sleeptime = (random.random() * 2) + 0.5
time.sleep(sleeptime/4)
dc.SetTextForeground(wx.BLUE)
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
- dc.SetPen(wxPen(wxBLACK, 3, wxSOLID))
- dc.DrawLine((self.linePos, 0), (self.linePos, size.height-10))
+ dc.SetPen(wx.Pen(wx.BLACK, 3, wx.SOLID))
+ dc.DrawLine(self.linePos, 0, self.linePos, size.height-10)
bh = ypos = self.barHeight
for x in range(len(self.values)):
label, val = self.values[x]
- dc.DrawText(label, (5, ypos))
+ dc.DrawText(label, 5, ypos)
if val:
color = self.colors[ x % len(self.colors) ]
- dc.SetPen(wxPen(color))
- dc.SetBrush(wxBrush(color))
- dc.DrawRectangle((self.linePos+3, ypos), (val, bh))
+ dc.SetPen(wx.Pen(color))
+ dc.SetBrush(wx.Brush(color))
+ dc.DrawRectangle(self.linePos+3, ypos, val, bh)
ypos = ypos + 2*bh
if ypos > size[1]-10:
def OnPaint(self, evt):
- width, height = self.GetSize()
- bmp = wx.EmptyBitmap(width, height)
-
- dc = wx.MemoryDC()
- dc.SelectObject(bmp)
-
- self.Draw(dc, (width, height))
-
- wdc = wx.PaintDC(self)
- wdc.BeginDrawing()
- wdc.Blit((0,0), size, dc, (0,0))
- wdc.EndDrawing()
-
- dc.SelectObject(wx.NullBitmap)
+ dc = wx.BufferedPaintDC(self)
+ self.Draw(dc, self.GetSize())
def OnEraseBackground(self, evt):
-#----------------------------------------------------------------------
+#---------------------------------------------------------------------------
+
+class TestPanel(wx.Panel):
+ def __init__(self, parent, log):
+ self.log = log
+ wx.Panel.__init__(self, parent, -1)
+
+ b = wx.Button(self, -1, "Show Threads sample", (50,50))
+ self.Bind(wx.EVT_BUTTON, self.OnButton, b)
+
+
+ def OnButton(self, evt):
+ win = TestFrame(self, self.log)
+ win.Show(True)
+
+
+#---------------------------------------------------------------------------
+
def runTest(frame, nb, log):
- win = TestFrame(frame, log)
- frame.otherWin = win
- win.Show(True)
- return None
+ win = TestPanel(nb, log)
+ return win
#----------------------------------------------------------------------
+
overview = """\
The main issue with multi-threaded GUI programming is the thread safty
of the GUI itself. On most platforms the GUI is not thread safe and
if __name__ == '__main__':
import sys,os
import run
- run.main(['', os.path.basename(sys.argv[0])])
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])