wx.DC有很多类别,如wx.PaintDC,wx.ClientDC,wx.BufferedDC,wx.BufferedPaintDC等。
本文以五子棋界面设计为例,探讨下wx.ClientDC所画内容在窗口最小化之后消失的问题。
博主是初学wxpython,在进行五子棋界面设计之前也没有接触过UI设计这方面的内容,所以在编程之前我问了之前用java编过五子棋的同学一个问题:界面是落一个子刷新一次,还是直接叠加?那个同学给我的答案是落子一次刷新一次界面难道不麻烦吗,于是我就成功的陷入了落子之后不刷新界面的误区。
在界面设计是,我使用wx.PaintDC绘制了棋盘背景,使用wx.ClientDC绘制了棋子,下方是代码(截了好几次图,有重叠的部分),程序是能正常工作的,但是会出现最小化窗口后,wx.ClientDC绘制的棋子消失,但落子的位置已被程序记录的问题。
之后我搜索了相关问题,基本上大家的解答是如果想要绘制的东西保存下来,就要使用wx.PaintDC,并且为了保证无界面刷新闪烁的问题,要使用wx.BufferedPaintDC,
于是我删掉了wx.ClientDC,设置每落一子便用wx.PaintDC重新绘制,注意wx.PaintDC必须和EVT_PAINT绑定,使用self.Refresh()刷新界面即为重绘界面,具体代码如下: