Вставка изображения в буфер обмена в Python в Linux - PullRequest
2 голосов
/ 26 августа 2010

Я пробовал метод gtk, но он очень медленный и не работает для «большого» изображения (120 КБ)

import pygtk
pygtk.require('2.0')
import gtk
import os
def copy_image(f):
    assert os.path.exists(f), "file does not exist"
    clipboard = gtk.clipboard_get()
    img = gtk.Image()
    img.set_from_file(f)
    clipboard.set_image(img.get_pixbuf())
    clipboard.store()

Я пробовал xclip, и он только делает текст, так чтоварианты есть?Что использует Ubuntu?

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

Одним из способов получения текста из / в буфер обмена является использование XSel .Это не красиво и требует от вас общения с внешней программой.Но это работает и довольно быстро.

Не уверен, что это лучшее решение, но я знаю, что оно работает:)

[править] Вы правы, кажется, что xsel неподдержка изображений.

В этом случае, как насчет слегка измененной GTK версии.

def copy_image(f):
    assert os.path.exists(f), "file does not exist"
    image = gtk.gdk.pixbuf_new_from_file(f)

    clipboard = gtk.clipboard_get()
    clipboard.set_image(image)
    clipboard.store()

Обратите внимание, что вам, возможно, придется сменить владельца, если ваша программа выходит сразу из-закак Х отслеживает буфер обмена.

1 голос
/ 26 августа 2010

Возможно, вы захотите использовать метод set_with_data вместо этого, но это немного больше работы (данные изображения отправляются только тогда, когда приложение запрашивает их, поэтому ему нужны функции обратного вызова).Это также имеет преимущества при вставке в одно приложение вместо другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...