Search code examples
pythonpygtk

How to share clipboard data beetween processes in GTK?


I want to:

  1. put some text into clipboard
  2. end my program
  3. paste data into other application

but my code is not working:

#!/usr/bin/env python

import sys
import gtk

if __name__ == '__main__':
    if sys.argv[1] == 'put':
        clipboard = gtk.clipboard_get()
        clipboard.set_text('It\'s working')
        clipboard.store()
    elif sys.argv[1] == 'get':
        clipboard = gtk.clipboard_get()
        text = clipboard.wait_for_text()
        print('Text from clipboard: ', text)

I put text into clipboard by executing python2 ./test.py put and after that i want to get ext from clipboard with python2 ./test.py get.

Why clipboard.wait_for_text() always return None?


Solution

  • you have to enter main loop to let the clipboard manager get the text (Effect of PyGTK clipboard set_text persists only while process is running)

    #!/usr/bin/env python
    
    import sys
    import gtk, gobject
    
    
    if __name__ == '__main__':
        if sys.argv[1] == 'put':
            clipboard = gtk.clipboard_get()
            clipboard.set_text('It\'s working')
            clipboard.store()
        elif sys.argv[1] == 'get':
            clipboard = gtk.clipboard_get()
            text = clipboard.wait_for_text()
            if text == None:
                print("empty text")
            else:
                print('Text from clipboard: ', text)
    gobject.timeout_add(100, gtk.main_quit)
    gtk.main()