#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 — спасибо!