Предварительный выбор принтера и свойств принтера, не беспокоя пользователя

#python-3.x #printing #gtk3

#python-3.x #печать #gtk3

Вопрос:

Я пишу 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)
...
  

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

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

Я знаю, что могу вызвать

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

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

Итак: как я могу настроить принтер (по имени) на Gtk.Операция печати?

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

Ответ №1:

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

Извлечение параметров печати из файла:

 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)