2013-12-25 7 views
0

Я новичок в python. Поэтому я хотел улучшить свои навыки. Прежде чем публиковать этот вопрос, я попытался найти какой-то код или идею, которая поможет мне с тем, что я намереваюсь сделать. Я видел несколько примеров и сообщений на SO и других сайтах. Но все они (те, с которыми я столкнулся) показали, как это сделать для одного объекта. Ниже я хочу это сделать.Copy-Paste In Python

Я хочу написать утилиту в python, которая позволила бы мне выбирать из содержимого, которое я хочу вставить, в зависимости от того, что были для моих последних 10, скажем, для команд копирования. Предположим, я щелкнул копию при выборе папки, а затем я выбрал текст и нажал ctrl + c. Теперь я хочу получить опцию, которая позволила бы мне вставлять как папку, так и текст. Возможно ли это?

Спасибо.

+0

Модуль pyperclip управляет буфером обмена в python. Почему вы не нашли это сами? Я просто googled «буфер обмена python». – djechlin

+0

Я тоже просматривал сообщения на SO. Но я не был уверен, как это сделать для нескольких копий в буфере обмена. Я рассмотрю ваши условия поиска. Спасибо –

+0

Важно, чтобы ваши исследования проводились на SO. Скажите, что вы посмотрели на него, насколько вы получили и т. Д., Иначе ваш вопрос, вероятно, будет закрыт и/или опущен. – djechlin

ответ

0

Вы можете сохранить последние 10 текстовых элементов из буфера обмена с помощью Tkinter:

#!/usr/bin/env python3 
from tkinter import Tk 
from collections import deque 

def call_repeatedly(root, delay, func, *args): 
    func(*args) 
    root.after(delay, call_repeatedly, root, delay, func, *args) 

def poll_clipboard(root, items): 
    text = root.clipboard_get() 
    if not items or items[-1] != text: 
     items.append(text) 

def main(): 
    root = Tk() 
    root.withdraw() # hide GUI 
    clipboard_items = deque(maxlen=10) # save last 10 clipboard items 
    call_repeatedly(root, 50, poll_clipboard, root, clipboard_items) # ms 
    call_repeatedly(root, 1000, print, clipboard_items) # print every second 
    root.after(10000, root.destroy) # exit in 10 seconds 
    root.mainloop() 

main() 

он опрашивает буфер каждые 50 мс. Опрос плохо в общем случае, если есть альтернативный интерфейс, который может позволить вам подписаться на события буфера обмена, которые будут уведомлены, когда новый элемент будет скопирован в буфер обмена.

будет ли он работать для любого контента, текста, изображений и т. Д.?

Этот код работает только с текстом. В общем, вы можете получить/установить другие типы, например, изображения (gtk, qt могут обеспечить кросс-платформенный способ сделать это).

Будет ли это разрешено копировать текст в виде текста во всех приложениях?

Вы работаете с буфером обмена, поэтому да, он должен работать во всех приложениях, которые могут работать с буфером обмена.

Можем ли мы заставить его работать как обычный Ctrl + C (команда копирования)

Copy команда может быть реализована с использованием set команды, например, from pyperclip.py:

def gtkSetClipboard(text): 
    cb = gtk.Clipboard() 
    cb.set_text(text) 
    cb.store() 

gtkSetClipboard(text) копии text в в буфер обмена.

+0

Спасибо за ваш ответ. Извините за то, что вы слишком наивны. У меня мало вопросов. Будет ли он работать для любого контента, текста, изображений и т. Д.? Позволит ли мне скопировать текст в виде текста во все приложения? Можем ли мы заставить его работать как обычно ctrl + c (команда копирования)? Извините, если это слишком просто, чтобы спросить. Еще раз спасибо. –

+0

@AashiqHussain: Я обновил свой ответ – jfs