Статья Как распечатать на принтере окно программы Python?

Кирилл

Команда форума
Администратор
Сообщения
13,912
Реакции
6,249
Баллы
993
Допустим, у вас есть приложение, написанное на Python и имеющее графическое представление (GUI).
Например - с помощью стандартной библиотеки tkinter.

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

Для начала нам потребуется выделить весь спектр задач:

1) Так как стандартным способом распечатать содержимое формы мы не можем то нам нужно получить снимок содержимого формы, а затем распечатать его.
2) Для того, что бы сделать снимок, мы можем пойти 3 путями:

Имитировать нажатие клавиш left_alt+PrintScreen, тем самым получив снимок активного окна.
Либо просто сделать снимок она в указанных координатах и распечатать его.
Указать шаблон, признак изображения, которое можно спрятать на форме, затем заставить скрипт найти это изображение на экране и вывести на печать заданную область.

При нажатии комбинации клавиш есть дополнительная сложность - достать снимок из буфера обмена, сохранить его как файл и потом вывести на печать.
Вариант с поиском скрытого шаблона ище более заморочистый.
Мне кажется, что проще сделать снимок нужной области, а затем сохранить и распечатать.

Для этого отлично подошла библиотека PIL и ее модуль ImageGrab.

Напишем простую программу:

1580492276028.png

Python:
import tkinter as tk
from PIL import ImageGrab
import os

def func() ->None:
    # Получаем координаты точек формы x и y
    x = root.winfo_x()
    y = root.winfo_y()
    # Получаем высоту и ширину формы
    height = root.winfo_height()
    width = root.winfo_width()
    # Делаем снимок, сохраняем, печатаем
    image = ImageGrab.grab( (x+50, y, x+width, y+height) )
    image.save("screen.bmp", "BMP")
    os.startfile("screen.bmp", "print")

root = tk.Tk()

bt = tk.Button(text='Print form', command = func)
bt.pack()

root.geometry('300x300')
root.mainloop()
Тут все внимание можно сконцентрировать на функции func:

1) Первым делом на нужно получить координаты левой верхней точки формы
2) Затем получаем размер формы - высоту и ширину
3) Делаем снимок, области экрана, которая будет равна соответственно точка x, y, x+width, y+height
4) Для чего я прибавил к x 50? При скрине получается некоторое смещение, а мы таким образом нейтрализуем его.
Попробуйте разницу - будет заметно.
5) Сохраняем, указываем формат.
6) Выводим на принтер с помощью стандартной библиотеки os

Все.
 
Сверху Снизу