【问题标题】:Interacting with selected text in Python在 Python 中与选定的文本进行交互
【发布时间】:2019-04-02 22:33:27
【问题描述】:

我想创建一个简单的 Python 应用程序,它可以与当前选定的文本进行交互,并在用户按下键盘快捷键时对其进行一些操作。最明显的方法是使用pyautogui.hotkey("ctrl", "c") 将文本复制到剪贴板,然后与之交互。问题是,此方法会覆盖用户当前在剪贴板中的所有内容。

我能想到的唯一解决方法是:

#make a backup of current clipboard contents
tmpClipboard = pyperclip.paste()

#copy selected text and store it
pyautogui.hotkey("ctrl", "c")
selectedText = pyperclip.paste()

#copy old clipboard contents back inside
pyperclip.copy(tmpClipboard)

#process selected text
doStuff(selectedText)

有什么更好的方法来处理这个问题(因为我不确定当用户在剪贴板中有一个图像而不是纯文本时这会表现如何)?

【问题讨论】:

    标签: python clipboard


    【解决方案1】:

    您可以尝试让用户定义交互的热键。我不知道您的最终应用程序,因此这取决于您想要实现的用户体验。例如,如果用户是工程师,我认为他更愿意被提示默认热键,并根据需要进行更改。

    关于抓取选定的文本 - 这取决于您的 GUI 绑定 - 您使用的是 TkQt 等吗? 例如,Qt 有一个 QTextCursor,您可以使用它来获取有关光标和用户选择的信息,然后在不使用整个剪贴板技巧的情况下抓取文本。这样您还可以确保获得所需的数据。

    至于图片等:如果你仍然选择使用剪贴板,你可以断言数据的类型。但是,它确实有大量可能的值,而且看起来非常麻烦且效率低下。

    祝你好运!

    【讨论】:

    • 感谢您的回复,但这里的问题是我不想让它依赖于 GUI 库,因为我不想让应用程序能够从自身内部获取文本,而是全系统。假设您在 Word 或记事本或您选择的浏览器中选择文本,您使用快捷方式,Python 应用程序会捕获所选文本 - 这就是我想要的行为。
    • 在这种情况下,请考虑断言解决方案。与其他程序的交互高度依赖于目标操作系统、程序等。例如,Web 浏览器中的文本框非常有问题(因为并非所有元素都是真正的文本框、域组合等)。对于 Web,我建议开发 Chrome 扩展程序或类似的东西,然后使用 Python 代码进行计算。对于 Word,您需要 pywin32 或类似的东西。请看其他话题stackoverflow.com/questions/14288177/…
    • 哦,天哪,在这种情况下,这听起来像 hacky 的复制粘贴解决方案可能是最快的方法:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2016-05-29
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多