我的wx.OnPaint()函数未在wx主循环中不断调用

时间:2019-06-19 20:19:19

标签: python wxpython pyopengl

我正在使用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")

1 个答案:

答案 0 :(得分:2)

.Refresh()可能会强制重绘wx.Windowwx.Frame之类的GLCanvas
例如您可以使用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