Хорошо, поэтому я переработал пример, который я привел в своем комментарии.Это должно только захватить коробку в окне.
from gi.repository import Gtk, Gdk
import cairo
import sys
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Welcome to GNOME")
self.set_default_size(200, 100)
self.image_file = image_file="/home/house/window.png"
self.vbox = Gtk.VBox()
self.add(self.vbox)
label = Gtk.Label()
label.set_text("Hello GNOME!")
self.vbox.pack_start(label, True, True, 0)
self.button = Gtk.Button("ScreenshotMe!")
self.button.connect("clicked", self.on_save_image)
self.vbox.pack_start(self.button, False, False, 0)
self.show_all()
self.connect("destroy", Gtk.main_quit)
def on_save_image(self, button):
"""
Get the surface of the current window and save it as a png
"""
window = self.get_window()
width, height = self.vbox.get_allocated_width(), \
self.vbox.get_allocated_height()
surface = Gdk.Window.create_similar_surface(window,
cairo.CONTENT_COLOR,
width, height)
cairo_context = cairo.Context(surface)
Gdk.cairo_set_source_window(cairo_context, window, 0, 0)
cairo_context.paint()
surface.write_to_png(self.image_file)
def main():
app = MyWindow()
Gtk.main()
if __name__ == "__main__":
sys.exit(main())