Предварительно выберите принтер и свойства принтера, не беспокоя пользователя - PullRequest
0 голосов
/ 08 апреля 2019

Я пишу приложение Python3-Gtk3, которое печатает QR-этикетки на принтере этикеток.До сих пор мой код

...
psize = Gtk.PaperSize.new_custom('Our-QR-Label', 'QR-Label', 29, 42, Gtk.Unit.MM)
pagesetup = Gtk.PageSetup()
pagesetup.set_paper_size(psize)
...
pagesetup.set_orientation(Gtk.PageOrientation.PORTRAIT)

print_dialog = Gtk.PrintOperation()
print_dialog.set_n_pages(len(self.qrcodes))
print_dialog.set_default_page_setup(pagesetup)
print_dialog.connect("draw-page", self.print_page)
print_dialog.run(Gtk.PrintOperationAction.PRINT_DIALOG, None)
...

отображал диалоговое окно принтера с выбранным принтером по умолчанию .Когда пользователь выбирает принтер этикеток и начинает печатать, все работает.

Но поскольку наши пользователи обычно никогда не видят диалоговых окон принтера, они будут сбиты с толку и могут все испортить: - (

Iзнаю, что я могу позвонить

print_dialog.run(Gtk.PrintOperationAction.PRINT, None)

, чтобы обойти диалоговое окно печати, но затем вывод идет на стандартный принтер, что не является желаемым результатом.

Итак: Как я могу предварительно установитьпринтер (по имени) для Gtk.PrintOperation?

PS: я пишу и тестирую свои программы в Linux, но наши пользователи работают в Windows.

1 Ответ

0 голосов
/ 12 апреля 2019

Самый простой способ, который я знаю, это сохранить настройки печати в файл.Если файл не существует, попросите пользователя выбрать принтер, а затем сохраните эти настройки в файле.

Получение настроек печати из файла:

self.settings_file = ("my/settings/file")
try:
    settings = Gtk.PrintSettings.new_from_file(self.settings_file)
    print_dialog.set_print_settings(settings)
    #do your print stuff here without a dialog
except Exception as e:
    print ("Error when loading print settings file: ", str(e))
    settings = Gtk.PrintSettings()
    print_dialog.set_print_settings(settings)
    #do your print stuff here using a dialog

Захват выбранного принтера и сохранение вфайл:

result = print_dialog.run(Gtk.PrintOperationAction.PRINT_DIALOG, None)
if result == Gtk.PrintOperationResult.APPLY:
    settings = print_dialog.get_print_settings()
    settings.to_file(self.settings_file)
...