GdkPixBuf.pixbuf_get_from_window()在我的Linux Manjaro (Cinnamon)机器上不起作用。下面的代码(仅截图部分)在我的旧Manjaro安装中确实可以完美地截取屏幕截图,但最近我重新安装了,现在相同的代码不起作用。我什至在Linux Mint (Cinnamon)中尝试了相同的代码,但它在那里也不起作用。
当我使用 Visual Studio Code 运行/调试代码时,代码中没有出现异常,.xsession-errors中没有任何内容,journalctl日志中也没有任何内容。
所以我只能猜测我在旧机器上安装的新机器上缺少一些依赖项,但是如果没有错误消息,很难找出缺少的内容。当我从终端运行应用程序时,我没有得到任何输出。该应用程序工作正常,除了屏幕截图部分。
当然,我已经在我的虚拟环境中安装了PyGObject和PyCairo 。因此,我必须缺少另一个依赖项,有人知道缺少什么吗?
[编辑] 我不知道这是我的虚拟环境的问题(我需要的pip install
东西)还是我的机器上缺少的东西(我需要的东西sudo pacman -S
)。当我让它在我的旧机器上运行时,我真的刚刚了解了虚拟环境和 python(尽管仍然是一个新手),所以它可能因为我在全球范围内安装了一些东西而一直在运行。
from gi.repository import Gdk, GdkPixbuf
class ScreenShotHelper(object):
def __init__(self):
"""Setup the screenshothelper class"""
# Get root window (contains all monitors and windows)
self.root_window = Gdk.get_default_root_window()
def grab_and_scale(self, position, size, requested_size):
"""Grab a screenshot and scale it down to requested size"""
# Get specific area from root window
pb = Gdk.pixbuf_get_from_window(self.root_window,
position.left,
position.top,
size.width,
size.height)
# Scale the image down to the size the user asked for
pb = pb.scale_simple(requested_size.width,
requested_size.height,
GdkPixbuf.InterpType.NEAREST)
return pb