【问题标题】:Tkinter bind copy event needs to work in background as wellTkinter 绑定复制事件也需要在后台工作
【发布时间】:2019-12-20 23:37:54
【问题描述】:

我有一个简单的复制粘贴事件,它应该在我的程序运行时触发一个函数:

root = tkinter.Tk()
root.bind('<Control-c>', parse_item) 
root.mainloop()

parse_item 抓取剪贴板的内容并进行一些计算。

我遇到的问题是:

仅当我的程序处于焦点时才有效。我需要在程序中使用鼠标,然后才会触发绑定事件。

我需要什么:

如果程序不在焦点上(例如程序被最小化),也应该触发绑定事件。它应该总是在程序运行时触发。

【问题讨论】:

  • 当程序不在焦点时,Python 无法控制击键的处理。
  • 我可以使用 pynput.keyboard.Listener。这将作为脚本工作,但我想为用户提供一个 GUI,他可以使用它来关闭/停止脚本。有什么想法我可以在这里使用哪些工具?
  • 你使用什么 Python 模块并不重要——它不会改变当你的脚本没有焦点时操作系统处于控制之中的事实。可能有一些方法可以编写用 Python 编写的后台守护程序或系统服务。如何执行此类操作取决于您使用的操作系统。
  • @Roman "我可以使用 pynput.keyboard.Listener。":如果您可以使用 pynput,请使用它作为后台服务使用某种Inter-process_communication@ 通知您的tkinter GUI
  • @All 感谢您的回复。我已经有一个可行的解决方案。它在后台工作。我使用 tkinters after() 方法每秒调用另一个方法。另一种方法只是检查剪贴板内容是否改变,如果是,它会做一些事情。完美运行。

标签: python python-3.x tkinter


【解决方案1】:

仅当我的程序处于焦点时才有效。我需要在程序中使用鼠标,然后才会触发绑定事件。

你不能用 tkinter 做到这一点。它只能对它控制的小部件中的事件进行操作,并且只有当它具有焦点时。您必须使用特定于平台的工具来拦截来自其他程序的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多