在wxpython中获取一个小部件dc

时间:2011-01-23 13:06:59

标签: wxpython

我正在寻找一种获取窗口小部件的方法,例如面板设备上下文,如果这是正确的单词。我希望获得面板的位图及其所有子窗口小部件,以便我可以在绘制直流中操作它以淡出面板的淡出动画。这是可能的,如果是这样,代码是什么?我希望有这样的东西.. wx.Panel.GetDCMap() 这将返回一个将要绘制到屏幕上的位图,以便我可以淡化它。这也需要抓住小部件看起来的位图,即使它是隐藏的。否则我可以使用widget.GetScreenRect()然后将它blit到缓冲区..谢谢

1 个答案:

答案 0 :(得分:3)

好问题!我认为它不会起作用,但我尝试了这个并且它确实:

def window_to_bitmap(window):
    width, height = window.GetSize()
    bitmap = wx.EmptyBitmap(width, height)
    wdc = wx.WindowDC(window)
    mdc = wx.MemoryDC(bitmap)
    mdc.Blit(0, 0, width, height, wdc, 0, 0)
    return bitmap

如果窗口被隐藏,则无效。

远离屏幕移动窗口的工作,显示客户区,但不显示窗口装饰。

首先调用SetTransparent(0)与将窗口移出屏幕具有类似的效果。

以上在64位Windows 7上进行的测试。

如果您只需要客户区,则可以执行上述方法之一并调整函数以仅使用客户区创建位图,如下所示:

def window_to_bitmap(window):
    width, height = window.GetClientSize()
    bitmap = wx.EmptyBitmap(width, height)
    wdc = wx.ClientDC(window)
    mdc = wx.MemoryDC(bitmap)
    mdc.Blit(0, 0, width, height, wdc, 0, 0)
    return bitmap