Как поделиться данными буфера обмена между процессами в GTK? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу:

  1. поместить некоторый текст в буфер обмена
  2. завершить мою программу
  3. вставить данные в другое приложение

но мой код не работает:

#!/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)

Я помещаю текст в буфер обмена, выполняя python2 ./test.py put, и после этого я хочу получить ext из буфера обмена с помощью python2 ./test.py get.

Почему буфер обмена.wait_for_text () всегда возвращает None?

Ответы [ 2 ]

0 голосов
/ 16 августа 2019

Для GTK3:

#!/usr/bin/env python3

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

class CopyToClipboard(Gtk.Window):
    def __init__(self, text):
        super(CopyToClipboard, self).__init__()
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text(text, -1)
        clipboard.store()

CopyToClipboard("your text goes here\n")
0 голосов
/ 08 декабря 2018

Вы должны войти в основной цикл, чтобы менеджер буфера обмена получил текст ( Эффект буфера обмена PyGTK set_text сохраняется только во время работы процесса )

#!/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()  
...