wxpython使用DC后擦除背景

2024-10-02 00:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有麻烦张贴一个删除背景事件画到屏幕上。在我的完整代码中,我想画一个位图(DC.DrawBitmap())单击按钮时。我通过发布一个EVT_ERASE_BACKGROUND事件来实现这一点,该事件由一个自定义绑定方法捕获。但是,一旦使用该方法,则事件.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()

这引发了:

^{pr2}$

我怎么解决这个问题?在


Tags: 方法代码selffooinitdef事件dc
1条回答
网友
1楼 · 发布于 2024-10-02 00:40:57

在发帖前花了一个小时没成功,五分钟后我自己解决了。。。在

下面是我的解决方案,如果事件没有自己的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()

相关问题 更多 >

    热门问题