我正在尝试从ADB获取android截图并使用Python和PIL在窗口中显示它们(它可能是Pillow,我不确切知道)
代码非常简单:
class Viewer(object):
def __init__(self):
self.root = Tkinter.Tk()
self.root.title('ADB connection')
self.pane = None
self.update()
self.root.mainloop()
def update(self):
with open(os.devnull, 'w') as nul:
subprocess.check_call([adb, adb_option, 'shell', 'screencap -p /sdcard/scr.png'])
subprocess.check_call([adb, adb_option, 'pull', '/sdcard/scr.png'], stdout=nul)
tkimg = ImageTk.PhotoImage(Image.open('scr.png'))
if not self.pane:
self.pane = Tkinter.Label(self.root, image = tkimg)
self.pane.pack()
else:
self.pane.configure(image = tkimg)
self.root.after(timeout, self.update)
我找到了很多指南,代码在各处大致相同。
在我的情况下它不起作用:加载图像,宽度和高度匹配,并显示正确尺寸的窗口,但不显示图像。该文件存在,并包含实际的屏幕截图。如果我调试程序,图像对象似乎是好的(至少是大小,我无法读取图像数据)
解码或显示PNG数据似乎是一个问题。或者我可能缺少一些参数或一些函数调用?
答案 0 :(得分:0)
我终于明白了这个问题:python在显示之前就是垃圾收集图像。
我已将tkimg
更改为self.tkimg
,现在可以正常使用。
非常感谢。