Gtk.PrintOperation.run () не отвечает - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь использовать следующий скрипт для печати документов.Проблема в том, что ничего не происходит.Печатается слово «выполнить», и когда я нажимаю на кнопку «ОТМЕНА» в диалоговом окне, отклик получается ожидаемым.Кнопки PREVIEW и PRINT вызывают выход из диалогового окна, но результат не печатается.Три метода обратного вызова заглушаются при каждой печати своего имени, ни один из которых не отображается.

Я использую Ubuntu 18.04 с python 3.6.7.

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

def PrintManager (self):
    ps = Gtk.PrintSettings.new ()
    po = Gtk.PrintOperation.new ()
    po.set_print_settings (ps)
    po.set_n_pages (1)

    po.connect ("begin_print", self.BeginPrint, self.PrintList)
    po.connect ("draw_page", self.DrawPage, self.PrintList)
    po.connect ("end_print", self.EndPrint, self.PrintList)

    print ("execute")                                                     #x
    result = po.run (Gtk.PrintOperationAction.PRINT_DIALOG, const.internal["parent"])
    print (result)                                                        #x

    if result == Gtk.PrintOperationResult.APPLY:
       ps = op.get_print_settings ()

    elif result == Gtk.PrintOperationResult.ERROR:
       dialog = Gtk.MessageDialog.new (Gtk.DialogFlags.DESTROY_WITH_PARENT,
          Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, const.printError)
       dialog.run ()
       dialog.destroy ()


def BeginPrint (self, po, ctx, data):
    print ("{}.BeginPrint ()".format (__name__)) 


def DrawPage (self, po, ctx, cnt, data):
    print ("{}.DrawPage ({})".format (__name__, cnt))


def EndPrint (self, po, ctx, data):
    print ("{}.EndPrint ()".format (__name__))

1 Ответ

0 голосов
/ 24 марта 2019

Что-то не так с вашей программой (скорее всего, const), потому что она работает, как и ожидалось:

#!/usr/bin/env python

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


class GUI:
    def __init__(self):

        self.window = Gtk.Window()
        button = Gtk.Button(label = "print op")
        button.connect("clicked", self.button_clicked )
        self.window.add(button)
        self.window.set_size_request(400, 400)
        self.window.show_all()

    def button_clicked (self, button):
        ps = Gtk.PrintSettings.new ()
        po = Gtk.PrintOperation.new ()
        po.set_print_settings (ps)
        po.set_n_pages (1)
        self.PrintList = []
        po.connect ("begin_print", self.BeginPrint, self.PrintList)
        po.connect ("draw_page", self.DrawPage, self.PrintList)
        po.connect ("end_print", self.EndPrint, self.PrintList)

        print ("execute")                                                     #x
        result = po.run (Gtk.PrintOperationAction.PRINT_DIALOG, self.window)
        print (result)                                                        #x

        if result == Gtk.PrintOperationResult.APPLY:
            ps = po.get_print_settings ()

        elif result == Gtk.PrintOperationResult.ERROR:
            dialog = Gtk.MessageDialog.new (Gtk.DialogFlags.DESTROY_WITH_PARENT,
                Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, po.printError)
            dialog.run ()
            dialog.destroy ()


    def BeginPrint (self, po, ctx, data):
        print ("{}.BeginPrint ()".format (__name__)) 


    def DrawPage (self, po, ctx, cnt, data):
        print ("{}.DrawPage ({})".format (__name__, cnt))


    def EndPrint (self, po, ctx, data):
        print ("{}.EndPrint ()".format (__name__))

    def on_window_destroy(self, window):
        Gtk.main_quit()

app = GUI()
Gtk.main()
...