- Сообщения
- 14,072
- Реакции
- 5,791
Допустим, у вас есть приложение, написанное на Python и имеющее графическое представление (GUI).
Например - с помощью стандартной библиотеки tkinter.
Как известно, на python возможностью вывода на принтер имеет библиотека QT, но сегодня речь пойдет не о ней.
Для начала нам потребуется выделить весь спектр задач:
1) Так как стандартным способом распечатать содержимое формы мы не можем то нам нужно получить снимок содержимого формы, а затем распечатать его.
2) Для того, что бы сделать снимок, мы можем пойти 3 путями:
Имитировать нажатие клавиш left_alt+PrintScreen, тем самым получив снимок активного окна.
Либо просто сделать снимок она в указанных координатах и распечатать его.
Указать шаблон, признак изображения, которое можно спрятать на форме, затем заставить скрипт найти это изображение на экране и вывести на печать заданную область.
При нажатии комбинации клавиш есть дополнительная сложность - достать снимок из буфера обмена, сохранить его как файл и потом вывести на печать.
Вариант с поиском скрытого шаблона ище более заморочистый.
Мне кажется, что проще сделать снимок нужной области, а затем сохранить и распечатать.
Для этого отлично подошла библиотека PIL и ее модуль ImageGrab.
Напишем простую программу:
Тут все внимание можно сконцентрировать на функции func:
1) Первым делом на нужно получить координаты левой верхней точки формы
2) Затем получаем размер формы - высоту и ширину
3) Делаем снимок, области экрана, которая будет равна соответственно точка x, y, x+width, y+height
4) Для чего я прибавил к x 50? При скрине получается некоторое смещение, а мы таким образом нейтрализуем его.
Попробуйте разницу - будет заметно.
5) Сохраняем, указываем формат.
6) Выводим на принтер с помощью стандартной библиотеки os
Все.
Например - с помощью стандартной библиотеки tkinter.
Как известно, на python возможностью вывода на принтер имеет библиотека QT, но сегодня речь пойдет не о ней.
Для начала нам потребуется выделить весь спектр задач:
1) Так как стандартным способом распечатать содержимое формы мы не можем то нам нужно получить снимок содержимого формы, а затем распечатать его.
2) Для того, что бы сделать снимок, мы можем пойти 3 путями:
Имитировать нажатие клавиш left_alt+PrintScreen, тем самым получив снимок активного окна.
Либо просто сделать снимок она в указанных координатах и распечатать его.
Указать шаблон, признак изображения, которое можно спрятать на форме, затем заставить скрипт найти это изображение на экране и вывести на печать заданную область.
При нажатии комбинации клавиш есть дополнительная сложность - достать снимок из буфера обмена, сохранить его как файл и потом вывести на печать.
Вариант с поиском скрытого шаблона ище более заморочистый.
Мне кажется, что проще сделать снимок нужной области, а затем сохранить и распечатать.
Для этого отлично подошла библиотека PIL и ее модуль ImageGrab.
Напишем простую программу:
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
Все.