gpt4 book ai didi

python - 为什么我的缓冲 GraphicsContext 应用程序存在闪烁问题?

转载 作者:行者123 更新时间:2023-11-30 23:59:19 25 4
gpt4 key购买 nike

import wx

class MainFrame(wx.Frame):
def __init__(self,parent,title):

wx.Frame.__init__(self, parent, title=title, size=(640,480))
self.mainPanel=DoubleBufferTest(self,-1)

self.Show(True)

class DoubleBufferTest(wx.Panel):
def __init__(self,parent=None,id=-1):
wx.Panel.__init__(self,parent,id,style=wx.FULL_REPAINT_ON_RESIZE)

self.SetBackgroundColour("#FFFFFF")

self.timer = wx.Timer(self)
self.timer.Start(100)
self.Bind(wx.EVT_TIMER, self.update, self.timer)
self.Bind(wx.EVT_PAINT,self.onPaint)


def onPaint(self,event):
event.Skip()
dc = wx.MemoryDC()
dc.SelectObject(wx.EmptyBitmap(640, 480))
gc = wx.GraphicsContext.Create(dc)
gc.PushState()
gc.SetBrush(wx.Brush("#CFCFCF"))
bgRect=gc.CreatePath()
bgRect.AddRectangle(0,0,640,480)
gc.FillPath(bgRect)
gc.PopState()

dc2=wx.PaintDC(self)
dc2.Blit(0,0,640,480,dc,0,0)
def update(self,event):
self.Refresh()

app = wx.App(False)
f=MainFrame(None,"Test")
app.MainLoop()

我想出了这段代码来将双缓冲 GraphicsContext 内容绘制到面板上,但窗口上不断闪烁。我尝试了不同类型的路径,例如直线和曲线,但它仍然存在,我不知道是什么原因造成的。

最佳答案

您会出现闪烁,因为每个 Refresh() 都会导致背景在调用 onPaint 之前被删除。您需要绑定(bind)到 EVT_ERASE_BACKGROUND 并使其成为无操作。

class DoubleBufferTest(wx.Panel):
def __init__(self,parent=None,id=-1):
# ... existing code ...
self.Bind(wx.EVT_ERASE_BACKGROUND, self.onErase)
def onErase(self, event):
pass
# ... existing code ...

关于python - 为什么我的缓冲 GraphicsContext 应用程序存在闪烁问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2452012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com