我无法发布擦除背景事件以绘制到屏幕上。在我的完整代码中,我想在单击按钮时绘制位图(DC.DrawBitmap())。我通过发布一个由自定义绑定方法捕获的EVT_ERASE_BACKGROUND事件来做到这一点。但是,一旦它在该方法中,通常工作的event.GetDC()方法将失败。
这是一个具有相同结果的简化代码:
import wx class 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) self.Show() def OnEraseBackground(self, e): DC = e.GetDC() def onEnter(self, e): wx.PostEvent(self, wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND)) app = wx.App() Foo(None, 'foo') app.MainLoop()
这引起了:
AttributeError: 'PyCommandEvent' object has no attribute 'GetDC'
我该如何解决这个问题?
答案 0 :(得分:0)
在发布之前已经工作了一个小时没有成功,然后在五分钟后自己解决了......
这是我的解决方案,如果事件没有自己的DC,则创建一个ClientDC:
import wx class 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) self.Show() def OnEraseBackground(self, e): try: DC = e.GetDC() except: DC = wx.ClientDC(self) DC.Clear() def onEnter(self, e): wx.PostEvent(self, wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND)) app = wx.App() Foo(None, 'foo') app.MainLoop()