gpt4 book ai didi

python - 如何在 Linux 中用 Python 捕获 gtk ApplicationWindow 的图像?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:13 26 4
gpt4 key购买 nike

我需要在 Linux 中用 Python 捕获 ApplicationWindow 的图像。

这将是我从 here 中提取的假设测试应用程序:

from gi.repository import Gtk
import sys


class MyWindow(Gtk.ApplicationWindow):
# constructor for a Gtk.ApplicationWindow

def __init__(self, app):
Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
self.set_default_size(200, 100)

# create a label
label = Gtk.Label()
# set the text of the label
label.set_text("Hello GNOME!")
# add the label to the window
self.add(label)


class MyApplication(Gtk.Application):

def __init__(self):
Gtk.Application.__init__(self)

def do_activate(self):
win = MyWindow(self)
win.show_all()

def do_startup(self):
Gtk.Application.do_startup(self)

app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)

我需要将窗口的内容(应用程序栏除外)保存在图像文件中。

最佳答案

on_save_image 方法,将当前窗口保存为png文件。

您还可以在保存前将 cairo 转换应用于 cairo_context。

from gi.repository import Gtk, Gdk
import cairo
import sys


class MyWindow(Gtk.ApplicationWindow):
# constructor for a Gtk.ApplicationWindow

def __init__(self, app, image_file="/tmp/window.png"):
Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
self.set_default_size(200, 100)
self.image_file = image_file

vbox = Gtk.VBox()
self.add(vbox)

# create a label
label = Gtk.Label()
# set the text of the label
label.set_text("Hello GNOME!")
# add the label to the window
vbox.pack_start(label, True, True, 0)

button = Gtk.Button("ScreenshotMe!")
button.connect("clicked", self.on_save_image)
vbox.pack_start(button, False, False, 0)

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 = window.get_width(), window.get_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)


class MyApplication(Gtk.Application):

def __init__(self):
Gtk.Application.__init__(self)

def do_activate(self):
win = MyWindow(self)
win.show_all()

def do_startup(self):
Gtk.Application.do_startup(self)

app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)

关于python - 如何在 Linux 中用 Python 捕获 gtk ApplicationWindow 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com