【问题标题】:wxpython Post Erase Background with DCwxpython 使用 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'

我该如何解决这个问题?

【问题讨论】:

    标签: python wxpython


    【解决方案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()

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 2020-09-02
      • 2015-11-13
      • 1970-01-01
      • 2011-05-12
      • 2011-07-09
      • 2010-10-01
      • 2016-08-19
      相关资源
      最近更新 更多