wxpython 使用 DC 后擦除背景
Posted
技术标签:
【中文标题】wxpython 使用 DC 后擦除背景【英文标题】:wxpython Post Erase Background with DC 【发布时间】:2015-03-03 04:47:33 【问题描述】:我无法发布擦除背景事件以绘制到屏幕上。在我的完整代码中,我想在单击按钮时绘制位图 (DC.DrawBitmap())。我通过发布一个由自定义绑定方法捕获的 EVT_ERASE_BACKGROUND 事件来做到这一点。但是,一旦在那个方法中,正常工作的 event.GetDC() 方法就会失败。
这是一个具有相同结果的简化代码:
导入 wx 类Foo(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__ (self, parent, -1, title, size=(500,300)) self.panel = wx.Panel(self, -1) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_ENTER_WINDOW, self.onEnter) 自我展示() def OnEraseBackground(self, e): DC = e.GetDC() def onEnter(self, e): wx.PostEvent(自我,wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND)) 应用程序 = wx.App() 富(无,'富') app.MainLoop()这引发了:
AttributeError: 'PyCommandEvent' 对象没有属性 'GetDC'
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:在发布之前工作了一个小时没有成功,然后在五分钟后自己解决了......
这是我的解决方案,如果事件没有自己的 DC,则创建一个 ClientDC:
导入 wx 类Foo(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__ (self, parent, -1, title, size=(500,300)) self.panel = wx.Panel(self, -1) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_ENTER_WINDOW, self.onEnter) 自我展示() def OnEraseBackground(self, e): 尝试: DC = e.GetDC() 除了: DC = wx.ClientDC(self) DC.清除() def onEnter(self, e): wx.PostEvent(自我,wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND)) 应用程序 = wx.App() 富(无,'富') app.MainLoop()【讨论】:
以上是关于wxpython 使用 DC 后擦除背景的主要内容,如果未能解决你的问题,请参考以下文章
在 Docker 上运行的 Mongodb 正在重新启动后擦除集合