Paepoi

Paepoi » PyGObject Tips » PyGObject Tips | スクリーンショットを保存

PyGObject Tips | スクリーンショットを保存

# 最終更新日 2019.09.14

単独ページに整理、Wayland 関連の追記。

下記は X.org でないと動作しません。
#!/usr/bin/env python3

# Wayland では動作しません

import gi
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk

rootwin = Gdk.get_default_root_window()
x, y, w, h = rootwin.get_geometry()
pixbuf = Gdk.pixbuf_get_from_window(rootwin, x, y, w, h)
pixbuf.savev('screenshot.png', 'png', ['compression'], ['9'])

Wayland では Gnome Shell の機能を呼び出し、X.org でも動く。
GNOME 以外で使えるかどうかは試していません。
#!/usr/bin/env python3

from gi.repository import GLib, Gio

HOME = GLib.get_home_dir()

class App(Gio.Application):
    '''
        use mainloop
        Since there is no window, it ends as it is.
    '''
    def __init__(self):
        Gio.Application.__init__(self)

    def do_startup(self):
        Gio.Application.do_startup(self)
        connection = self.get_dbus_connection()
        '''
        # 全画面 (カーソルを含める, フラッシュ, ファイル名)
        connection.call_sync(
            'org.gnome.Shell.Screenshot',
            '/org/gnome/Shell/Screenshot',
            'org.gnome.Shell.Screenshot',
            'Screenshot',
            GLib.Variant('(bbs)', (False, True, f'{HOME}/全画面.png')),
            None, 0, -1)
        '''
        #'''
        # ウインドウ (ボーダー, カーソルを含める, フラッシュ, ファイル名)
        connection.call_sync(
            'org.gnome.Shell.Screenshot',
            '/org/gnome/Shell/Screenshot',
            'org.gnome.Shell.Screenshot',
            'ScreenshotWindow',
            GLib.Variant('(bbbs)', (True, True, True, f'{HOME}/ウインドウ.png')),
            None, 0, -1)
        #'''
        '''
        # 範囲 (x, y, width, height, フラッシュ, ファイル名)
        connection.call_sync(
            'org.gnome.Shell.Screenshot',
            '/org/gnome/Shell/Screenshot',
            'org.gnome.Shell.Screenshot',
            'ScreenshotArea',
            GLib.Variant('(iiiibs)', (0, 0, 500, 100, True, f'{HOME}/範囲.png')),
            None, 0, -1)
        '''

    def do_activate(self):
        pass

app = App()
app.run()

Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.