Как создать диалоговое окно печати в приложении tkinter

#python-3.x #tkinter #winapi #printing

Вопрос:

Есть ли способ вызвать стандартное диалоговое окно печати Windows из tkinter/Python 3.9? В настоящее время я реализовал это с помощью отдельного скрипта Python (print_mgr), который использует PyQt5 (например, dialog = QtPrintSupport.QPrintDialog()). Я компилирую скрипт print_mgr в файл .exe, а затем использую функцию подпроцесса для вызова print_mgr, передавая ему файл (имя файла) для печати. print_mgr представляет диалоговое окно печати, и пользователь может выбрать принтер, параметры/настройки/и т.д., А затем распечатать файл.

 proc = subprocess.Popen([str(Path(sys.executable).parent)   '\qrfe_print_mgr.exe', file_name])  

Это прекрасно работает, но немного сложнее, чем я бы предпочел.

Есть ли способ вызвать вызов WIN32API, чтобы открыть диалоговое окно печати? Я посмотрел на использование mshtml.dll и на самом деле может заставить его работать со следующим:

 import win32api  file='C:\Users\me\Documents\TestFiles\print_test.text' filepath = "C:\windows\system32\mshtml.dll,PrintHTML "   '"'   file   '"' win32api.ShellExecute(0, None, "rundll32.exe", filepath, None, 1)  

Но это неподдерживаемый обходной путь, и он выполняет другие действия, такие как добавление номеров страниц и URL-адреса в нижней части страницы.

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

Поэтому мне любопытно, есть ли у кого-нибудь какие-либо потенциальные решения этой проблемы.

Спасибо

Комментарии:

1. Что ж, возможно, вы сможете использовать этот win32print модуль. Я знаю, что вы можете печатать с его помощью, но я не думаю, что у него есть диалоговое окно печати (это просто судя по тому, что я нашел в переполнении стека; Я не использую Windows, поэтому я не знаю наверняка). И создать свой собственный диалог печати для работы win32print будет не намного проще, чем то, что у вас уже есть…

2. @SylvesterKruin — спасибо!