2017-06-10 2 views
0

Je souhaite que mon interface graphique soit rafraîchie (repeinte) toutes les secondes, donc je règle une minuterie pour appeler mon draw_all() périodiquement. Cependant, il ne dessine rien sur la toile. Quelqu'un connaît la raison? ou juste une meilleure façon de le faire?Dans wxPython, comment repeindre périodiquement?

def __init__(self): 
     ... 
     self.timer = wx.Timer(self) 
     self.Bind(wx.EVT_PAINT, self.init_canvas) 
     self.Bind(wx.EVT_TIMER, self.draw_all, self.timer) 
     self.timer.Start(1000) 
     self.Center() 
     self.Show() 

    def init_canvas(self, _): 
     print('here') 
     self._canvas = wx.PaintDC(self) 

    def draw_all(self, _): 
     print("there") 
     self._canvas.do_stuff 

Répondre

2

Vous devez mettre quelque chose sur la toile!

import wx 
class Test(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, None, id, title) 
     self.timer = wx.Timer(self) 
     self.Bind(wx.EVT_PAINT, self.init_canvas) 
     self.Bind(wx.EVT_TIMER, self.draw_all, self.timer) 
     self.timer.Start(1000) 
     self.Center() 
     self.Show() 
     self.Colour="RED" 

    def init_canvas(self, _): 
     print('here') 
     self._canvas = wx.PaintDC(self) 
     self._canvas.SetDeviceOrigin(30, 240) 
     self._canvas.SetAxisOrientation(True, True) 
     self._canvas.SetPen(wx.Pen(self.Colour)) 
     self._canvas.DrawRectangle(1, 1, 300, 200) 

    def draw_all(self, _): 
     if self.Colour == "RED": 
      self.Colour = "BLUE" 
     else: 
      self.Colour = "RED" 
     self._canvas.SetPen(wx.Pen(self.Colour)) 
     self._canvas.DrawRectangle(1, 1, 300, 200) 
     print (self.Colour) 

if __name__=='__main__': 
    app = wx.App() 
    frame = Test(parent=None, id=-1, title="Test") 
    frame.Show() 
    app.MainLoop()