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 后擦除背景的主要内容,如果未能解决你的问题,请参考以下文章

wxpython - 擦除背景擦除非背景组件

Python子进程 - stderr在读取后擦除

在 Docker 上运行的 Mongodb 正在重新启动后擦除集合

从向量中最快擦除元素或更好地使用内存(排序基数)

wxPython wxDC 对象来自 win32gui.GetDC

iframe 中的彗星服务器数据是不是只是累积?