我的wx.OnPaint() 函数在 wx 主循环中不会经常调用



我正在做一个使用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.FrameGLCanvas这样的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

最新更新