X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f4df0ecb9a2b34c9602b06f62bcef137b3d31df..9f4a1fed4506d8a03c848f9c8e2e85a1dd249880:/wxPython/demo/Threads.py diff --git a/wxPython/demo/Threads.py b/wxPython/demo/Threads.py index bd4385707a..ceb2fdc78b 100644 --- a/wxPython/demo/Threads.py +++ b/wxPython/demo/Threads.py @@ -1,14 +1,3 @@ -# 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 @@ -44,9 +33,8 @@ class CalcBarThread: 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) @@ -109,18 +97,18 @@ class GraphWindow(wx.Window): dc.SetBackground(wx.Brush(self.GetBackgroundColour())) dc.Clear() dc.SetPen(wx.Pen(wx.BLACK, 3, wx.SOLID)) - dc.DrawLine((self.linePos, 0), (self.linePos, size.height-10)) + 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(wx.Pen(color)) dc.SetBrush(wx.Brush(color)) - dc.DrawRectangle((self.linePos+3, ypos), (val, bh)) + dc.DrawRectangle(self.linePos+3, ypos, val, bh) ypos = ypos + 2*bh if ypos > size[1]-10: @@ -128,21 +116,8 @@ class GraphWindow(wx.Window): def OnPaint(self, evt): - width, height = size =self.GetSize() - bmp = wx.EmptyBitmap(width, height) - - dc = wx.MemoryDC() - dc.SelectObject(bmp) - - - self.Draw(dc, size) - - 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): @@ -224,19 +199,35 @@ class TestFrame(wx.Frame): -#---------------------------------------------------------------------- +#--------------------------------------------------------------------------- + +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 @@ -262,5 +253,5 @@ thread. 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:])