Gtk-Python: возможно ли напечатать содержимое окна и как это сделать? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть Gtk.Window, которое содержит Gtk.Grid и Gtk.Labels.Я хотел бы напечатать все, что отображается в этом окне.Можно ли это сделать и как?

Я искал учебники, но нашел только один для печати PDF-файлов.

Вот моя функция печати:

def on_print(self, widget):
    print("*** Print ***")
    print_op = Gtk.PrintOperation()
    print_op.set_n_pages(1)
    print_op.connect("draw_page", self.print_window)
    res = print_op.run(Gtk.PrintOperationAction.PRINT_DIALOG, None)

def print_window(self):

Не могли бы вы сказать мне, что я должен кодировать в функции обратного вызова "print_window", пожалуйста?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

Хорошо, поэтому я переработал пример, который я привел в своем комментарии.Это должно только захватить коробку в окне.

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...