【问题标题】:Save text cursor position in the currently focused application/control, then restore it and paste text在当前聚焦的应用程序/控件中保存文本光标位置,然后恢复它并粘贴文本
【发布时间】:2015-04-27 13:22:42
【问题描述】:

我想在文本光标的当前位置写“Hello World”。这可能是一个终端,或者我目前在其中提出这个问题的 Chrome 中的一个文本区域,或者一个 Word 应用程序。

用例如下:

该应用程序是一个符号识别系统。它应该能够识别稀有符号(如 ü、ä、ö 用于非德语或数学符号,如 Σ)。你可以try the recognizer here.
现在我想把它很好地集成到操作系统中,这样你就不必切换到浏览器,输入它,复制它,而是可以使用快捷方式调用程序:

  • 应用程序通过键盘快捷键启动/弹出
  • 保存文本光标所在的位置(但可以这样做)
  • 打开一个绘图区,用户绘制,点击关闭
  • 识别完成,然后将识别的序列写入文本光标之前所在的位置

我有兴趣支持:

  • Windows 7(例如,当用户打开 Microsoft Word、文本编辑器、浏览器...)
  • Linux Mint MATE(例如,当用户使用文本编辑器、LibreOffice、浏览器......)

【问题讨论】:

  • 致投票结束的人:为什么这太宽泛了?
  • 识别器非常好,你发布了一些代码吗?
  • @lelloman 我发布了所有我被允许发布的代码:martin-thoma.com/write-math
  • 如果我理解这个问题,您是在问如何将一些文本(“hello world”或识别的符号)粘贴到任何应用程序/小部件的当前光标位置目前有重点?就像,你在你的 python 应用程序中点击某个按钮,然后快速改变焦点,然后它粘贴到现在有焦点的任何地方?只提供一些“复制到剪贴板”功能并将实际粘贴留给用户不是更容易吗?
  • @tobias_k 是的。这个想法是我的 Python 应用程序从键盘快捷键开始,保存文本光标所在的位置(但是可以这样做)打开绘图区域,用户绘制,单击关闭,识别完成,然后识别符号是写入存储的文本光标位置。

标签: python user-interface winapi xserver


【解决方案1】:

使用这个 python 代码:

https://github.com/SavinaRoja/PyUserInput

我可以在窗口中生成一个字符串,就好像它是在那里键入的一样。虽然它在 Linux 中使用 Unicode 确实失败了:

>>> time.sleep(5) ; k.type_string('ΣΣ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pykeyboard/base.py", line 48, in type_string
    self.tap_key(i)
  File "/usr/local/lib/python2.7/dist-packages/pykeyboard/base.py", line 40, in tap_key
    self.press_key(character)
  File "/usr/local/lib/python2.7/dist-packages/pykeyboard/x11.py", line 91, in press_key
    keycode = self.lookup_character_keycode(character)
  File "/usr/local/lib/python2.7/dist-packages/pykeyboard/x11.py", line 222, in lookup_character_keycode
    keysym = Xlib.XK.string_to_keysym(special_X_keysyms[character])
KeyError: '\xce'

不确定有什么解决方案。无论如何,您如何在文本窗口中键入任何 Unicode 字符?有一个 Gnomey-Linux 标准,您可以在其中键入 Ctrl-Shift-u,然后键入十六进制数字,然后按 Ctrl-Shift 结束。这样做:

k.press_key(k.shift_key)
k.press_key(k.control_key)
k.type_string("u03a3")
k.release_key(k.shift_key)
k.release_key(k.control_key)

得到一个 Σ

包码好像是跨平台的,不知道是不是unicode入口方式。我只在 Linux 上测试过。

【讨论】:

  • 非常感谢(+1 并接受)!这 + 将字符串复制到剪贴板(并使用 ctrl + v)的想法似乎可以解决问题!
  • @moose 你仍然需要一种方法来记住之前聚焦的控件并切换回它
  • 事实证明我不需要这样做。我关闭窗口,焦点回到之前的位置,然后粘贴文本。 (至少在 Ubuntu MATE 上,我会在其他系统上测试。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
相关资源
最近更新 更多