如何使用python-keybinder获取剪贴板内容

2 投票
1 回答
1300 浏览
提问于 2025-04-17 11:13

我有两个代码示例。第一个是获取当前剪贴板的内容并打印出来,第二个是使用python-keybinder在按下热键时执行某些操作。我现在卡在了如何把这两个结合在一起。我想要的是,当我按下热键时,剪贴板的内容能够被打印出来(也就是说,我选中一段文字,按下热键,然后这段文字就会被打印出来)。这是我的代码:

获取选中的内容:

import gtk

def _clipboard_changed(clipboard, event):
    text = clipboard.wait_for_text()
    print text

gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY).connect("owner-change", _clipboard_changed)

gtk.main()

绑定热键:

import gtk
import keybinder

def callback():
    print "pressed"
    gtk.main_quit()

if __name__ == '__main__':
    keystr = "<Ctrl>A"
    keybinder.bind(keystr, callback)
    gtk.main()

1 个回答

4

我在工作中,暂时无法测试这个答案里的代码,不过这至少能给你指个方向。

我猜问题在于你无法把两个回调函数结合在一起。 有两个解决办法我能想到。

1) 使用一个全局变量来存储剪贴板数据,然后在键绑定的回调函数中读取这个数据。

    import gtk
    import keybinder

    cbText = ""

    def keybinder_callback():
        print cbText
        gtk.main_quit()

    def _clipboard_changed(clipboard, event):
        global cbText
        cbText = clipboard.wait_for_text()

    gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY).connect("owner-change", _clipboard_changed)

    if __name__ == '__main__':
        keystr = "<Ctrl>A"
        keybinder.bind(keystr, keybinder_callback)
        gtk.main()

2) 去掉第一个回调函数。

    import gtk
    import keybinder

    def callback():
        print "pressed"
        clipboard = gtk.clipboard_get()
        text = clipboard.wait_for_text()
        print text
        gtk.main_quit()

    if __name__ == '__main__':
        keystr = "<Ctrl>A"
        keybinder.bind(keystr, callback)
        gtk.main()

撰写回答