我正在做一个使用OpenGL和wxPython的项目来制作一个可导航的3D用户界面。但是,OnPaint()
函数似乎并没有在主循环中连续调用。这使得我的界面不会不断更新。该函数仅称为我在窗口周围拖动。例如:当我按箭头键时,窗口中的对象仅在我在窗口周围拖动时才移动。
我将代码归结为这些代码行。谁能帮我使OnPaint()
函数在打印一堆"HI"时不断调用,而无需在窗口周围拖动?
if __name__ == "__main__":
app = MyApp()
app.MainLoop()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame()
frame.Show()
return True
class MyFrame(wx.Frame):
def __init__(self):
self.size = (1000, 700)
wx.Frame.__init__(self, None, title ="wx", size=self.size)
self.canvas = MyCanvas(self)
class MyCanvas(GLCanvas):
def __init__(self, parent):
GLCanvas.__init__(self, parent, -1, size=(1000, 700))
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, event):
print("HI")
像
wx.Frame
或GLCanvas
这样的wx.Window
可以被.Refresh()
强制重新绘制。
例如,您可以使用wx.IdleEvent
触发画布连续刷新。
class MyFrame(wx.Frame):
def __init__(self):
self.size = (1000, 700)
wx.Frame.__init__(self, None, title ="wx", size=self.size)
self.canvas = MyCanvas(self)
self.Bind(wx.EVT_IDLE, self.OnIdle)
def OnIdle(self, event):
self.Refresh() # refresh self and all its children
#self.canvas.Refresh() # refresh self.canvas