使用Python创建复制和粘贴功能

时间:2014-11-17 14:01:17

标签: python copy-paste

我正在寻找一种使用Python向程序添加函数的解决方案。我想复制并粘贴所选数据(用鼠标选择)。

示例:

  1. 当我选择Hello时,使用CTRL-C从句子“Hello everybody”复制“Hello”。
  2. 复制使用CTRL-C
  3. 选择的阵列的一部分

    我的主要问题是如何使用所选数据。但现在我只能复制代码中定义的字符串(这里是“tt”):

    clipboard.OpenClipboard()
    clipboard.EmptyClipboard()
    clipboard.SetClipboardText('tt')
    clipboard.CloseClipboard()
    

    我尝试了在互联网和本网站上找到的几个代码,但没有一个代码解决了我的问题。

2 个答案:

答案 0 :(得分:2)

您不需要致电clipboard.SetClipboardText()。当程序支持剪贴板时, Ctrl + C 会将当前选定的文本复制到剪贴板中。要实现这一目标,您无需做任何事情。

如果您的问题是"如何从程序外部触发 Ctrl + C 将当前选定的文本复制到剪贴板",答案是:通常情况下,你不能。出于安全原因,大多数程序都不会响应其他程序发送的人为键事件。

第二个错误完全是另一回事。您的班级CopyEvent没有属性list,因此Python无法调用其中的方法。

答案 1 :(得分:0)

如果有人有兴趣,最后的代码:

from eventbase import EventBase

import win32clipboard as clipboard
import os

import wx

class CopyEvent(EventBase):
    TYPE = wx.NewEventType()
    ID = wx.NewId()
    BINDER = wx.PyEventBinder(TYPE, 1)    
    SHORTCUT_MODIFIER = wx.ACCEL_CTRL
    SHORTCUT_KEY = ord('C')

    def __init__(self, variable=None):
        EventBase.__init__(self)
        self._variable = variable

    def execute(self, viewmodel, parent):
        clipboard.OpenClipboard()
        clipboard.EmptyClipboard()
        text = self._convert_variable_to_text(self._variable)
        clipboard.SetClipboardText(text)
        clipboard.CloseClipboard()
        self.logger.info("Copying variable to clipboard")

    def _convert_variable_to_text(self, variable)            :
        lines = []
        lines.append("\t".join(variable.column_names))
        for row_nbr in variable.row_numbers:
            lines.append("\t".join([repr(i) for i in variable.get_row_as_tuple(row_nbr)]))
        return os.linesep.join(lines)