在Python中复制粘贴

时间:2013-12-25 05:32:37

标签: python-3.x clipboard

我是python的新手。所以我想提高自己的技能。在发布这个问题之前,我试图找到一些能够指导我打算做的代码或想法。我确实在SO和其他网站上看到了一些示例和帖子。但是他们(我遇到的那些)展示了如何为单个物体做到这一点。以下是我想要做的事情。

我想在python中编写一个实用程序,它允许我根据我的最后10个,比如说复制命令的内容来选择我要粘贴的内容。 假设我在选择文件夹时单击了复制,然后我选择了一些文本并按下了ctrl + c。现在我想获得让我粘贴文件夹和文本的选项。 那可能吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用tkinter保存剪贴板中的最后10个文本项:

#!/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(复制命令)一样工作

复制命令可以使用set命令实现,例如from pyperclip.py

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

gtkSetClipboard(text)text复制到剪贴板。