#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)