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

时间:2012-01-27 15:28:27

标签: python pygtk

我有两个代码示例。第一个是获取当前剪贴板内容并打印它,第二个是使用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 个答案:

答案 0 :(得分: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()