【发布时间】:2017-03-23 18:53:25
【问题描述】:
我在 wxPython Phoenix 中遇到了 ScreenDC 的问题。
我的工具应该在一段时间内拍摄多个屏幕截图。但每当我使用 ScreenDC 抓取屏幕截图并将其保存为 PNG 时,它只能在第一次正常工作。在接下来的所有时间里,它只保存与第一个相同的图像。要获得新图像,我必须重新启动程序,这不是我的选择。我想每当我打电话给wx.ScreenDC() 时,它都会得到与第一次相同的图像。
Ubuntu 16.04、wxPython 3.0.3 gtk3、python 3.6
我使用的代码:
def take_screenshot():
screen = wx.ScreenDC()
size = screen.GetSize()
width = size[0]
height = size[1]
bmp = wx.Bitmap(width, height)
mem = wx.MemoryDC(bmp)
mem.Blit(0, 0, width, height, screen, 0, 0)
bmp.SaveFile(str(datetime.now()) + '.png', wx.BITMAP_TYPE_PNG)
if __name__ == '__main__':
app = wx.App()
take_screenshot()
sleep(3)
take_screenshot()
sleep(3)
take_screenshot()
sleep(3)
take_screenshot()
也许有办法从内存中清除第一张图像。
我找到的唯一解决方案是运行一个单独的进程,在里面定义 wx.App 然后执行该功能。但是,这不是我的程序的选项。
谢谢。
UPD:这似乎是 wxPython Phoenix 的一些问题。如果你在 wxPython Classic 上运行它,一切正常(只使用 EmptyBitmap,而不是 Bitmap)。很奇怪,我会在他们的存储库中报告这个问题。
【问题讨论】:
-
参见Github