Форум сайта python.su
27
В гугле ничего толкового не нашёл.
Есть такой скрипт под венду
# -*- coding: utf-8 -*- from tkinter import * from PIL import Image, ImageGrab from datetime import datetime import win32clipboard import hashlib root = Tk() root.title("Автозапись") root.geometry("400x100+200+100") lb = Label(root, text="Включено автоматическое сохранение графики из буфера обмена") lb.pack(side=TOP,pady=10) Button(root,text="Завершить",command=root.destroy).pack(side=BOTTOM,pady=10) last_image = bytes(123) def getClipboardFormats(): "Сбор списка возможных форматов содержимого буфера обмена" win32clipboard.OpenClipboard() available_formats = [] current_format = 0 while True: # Читаем следующий формат current_format = win32clipboard.EnumClipboardFormats(current_format) # Все форматы исчерпаны, цикл прерываем if not current_format: break available_formats.append(current_format) win32clipboard.CloseClipboard() return available_formats def grab_it(): "Сохраняем снимок экрана в файл" global last_image im = ImageGrab.grabclipboard() # Флаг "текст". Устанавливается, если содержимое буфера поддерживает # текстовый формат. Calc при копировании таблицы(или ячейки) в буфер обмена # выдает поддержку "графических" форматов CF_BITMAP, CF_DIB, CF_DIBV5 # Чтобы отделить Calc'овское содержимое от PrintScreen используем этот флаг. txt = 1 in getClipboardFormats() # Переводим в байтовую последовательность для сравнения # со старым изображением if isinstance(im, Image.Image) and not txt: im1 = im.tobytes() else: im1 = None # Сохраняем в файл, только если свежая картинка в буфере И там графический # формат И формат не поддерживает "текст" if isinstance(im, Image.Image) and im1 != last_image and not txt: last_image = im1 # Название файла сгенерируем из текущих даты и времени fnm = "{}{}".format(str(datetime.now())[:19].replace(":","-"),".jpg") # print(fnm) im.save(fnm) # планировщик tkinter вызовет grab_it через 100мс root.after(100, grab_it) grab_it() # Запуск процесса root.mainloop()
Офлайн
44
def getClipboardText(): from Tkinter import Tk r = Tk() r.withdraw() s = r.clipboard_get() r.destroy() return s
и вставьте ссылку на его url Отредактировано AD0DE412 (Фев. 19, 2021 19:04:50)
Офлайн
27
Наверное, надо будет поэксперементировать с gtk. Если попытка получить текст из буфера даст пустоту, то содержимое не текст или пусто. Не знаю, сработает или выдаст ошибку, т.к. с gtk не знаком почти от слова “совсем”.
Кстати, оказывается, ImageGrab.grabclipboard() под линем не работает. Придётся искать способы сохранения, полученного из буфера, в файл.
Офлайн
294
в линуксе же есть xclip для этого, или интересует чистый пайтон? типа такого? https://gist.github.com/orschiro/8b9a1ddadb696c2b4587
[code python][/code]
Отредактировано PEHDOM (Фев. 20, 2021 12:53:21)
Офлайн
44
похоже мы немного друг друга не поняли (нужно мне более поробно все … об сказать)
tkinter захватывает содержимое буфера обмена в формате str()
т.е. захватывает текст (ну там путь к файлу, скопированый текст итд)
а при копировании например слоя в gimp вываливается с ошибкой
вопрос в том как вы собиратесь копировать графиику т.е. источник и формат этих данных
если файловая это система
то имея путь к файлу опредилить его тип можно в питоновских magic или mimetypes
все сложнее когда в буфере сырые данные тут magic не поможет
и вставьте ссылку на его url Отредактировано AD0DE412 (Фев. 20, 2021 15:35:00)
Офлайн
27
PEHDOM, да, именно что-то наподобие этого, чтобы из буфера обмена скрипт автоматом сохранял только картинку, а остальные виды содержимого игнорил бы. В винде копия ячейки Calc воспринимается библиотекой win32clipboard как текст и как картинка. Для исключения такого мусора включена проверка на тип содержимого буфера “текст”.
Не могу сказать как обстоят дела в линуксе, вдруг там тоже такая картина.
AD0DE412, в скрипте, который я привёл, tkinter никак не св. язан с манипуляцией с буфером обмена. Проверка типа содержимого win32clipboard, а чтение и сохранение выполняет pillow.
Моя задача проста и тривиальна: проверить есть ли картинка в буфере, если таковая появилась и она новая, то автоматом кинуть её в файл с названием “Год-месяц-день час-минуты-секунды” в любом формате (jpeg,png,gif и т.д).
Скрипт нужен для автоматического сохранения снимков экрана или окна.
Офлайн
27
Вот я дебил, на кой ляд колхозить что-то самому. Есть же шикарная штука для линукса: scrot называется. Ведь несколько лет назад сталкивался с этим самым scrot и тогда захотелось что-то подобное для венды. Вот тогда-то по кускам из интернета был собран скрипт, который я привёл в этой теме.
М-да, склероз никого не щадит.
Отредактировано Rafik (Фев. 22, 2021 09:19:43)
Офлайн
44
блин вам что скрины нужно было делать …
https://github.com/ponty/pyscreenshot
ImageGrab.grab() https://pillow.readthedocs.io/en/stable/reference/ImageGrab.html
ps еще ffmpeg может всякое
и вставьте ссылку на его url Отредактировано AD0DE412 (Фев. 22, 2021 17:13:45)
Офлайн