wx.ClientDC在窗口最小化之後所畫內容消失的問題探討

wx.DC有很多類別,如wx.PaintDC,wx.ClientDC,wx.BufferedDC,wx.BufferedPaintDC等。

本文以五子棋界面設計爲例,探討下wx.ClientDC所畫內容在窗口最小化之後消失的問題。

博主是初學wxpython,在進行五子棋界面設計之前也沒有接觸過UI設計這方面的內容,所以在編程之前我問了之前用java編過五子棋的同學一個問題:界面是落一個子刷新一次,還是直接疊加?那個同學給我的答案是落子一次刷新一次界面難道不麻煩嗎,於是我就成功的陷入了落子之後不刷新界面的誤區。

在界面設計是,我使用wx.PaintDC繪製了棋盤背景,使用wx.ClientDC繪製了棋子,下方是代碼(截了好幾次圖,有重疊的部分),程序是能正常工作的,但是會出現最小化窗口後,wx.ClientDC繪製的棋子消失,但落子的位置已被程序記錄的問題。

1111

2222

3333


之後我搜索了相關問題,基本上大家的解答是如果想要繪製的東西保存下來,就要使用wx.PaintDC,並且爲了保證無界面刷新閃爍的問題,要使用wx.BufferedPaintDC,

於是我刪掉了wx.ClientDC,設置每落一子便用wx.PaintDC重新繪製,注意wx.PaintDC必須和EVT_PAINT綁定,使用self.Refresh()刷新界面即爲重繪界面,具體代碼如下:4444

5555

6666