[Python] Буффер обмена (работа с буффером)

Модератор: Модераторы разделов

Аватара пользователя
Liksys
Сообщения: 2910

[Python] Буффер обмена

Сообщение Liksys »

Имеется прога на Питоне. В ней есть такие функции:

Код: Выделить всё

#####
def clipboard_clear() :
        if os.system("dcop klipper klipper clearClipboardHistory") != 0 :
                em = ErrorMessage()
                em.SetText(MYNAME+": cannot clear buffer")
                em.Show()
                em.MainLoop()

#####
def clipboard_get() :
        of = os.popen("dcop klipper klipper getClipboardContents")
        if of == None :
                em = ErrorMessage()
                em.SetText(MYNAME+": cannot get buffer")
                em.Show()
                em.MainLoop()
        else :
                return of.read()

Проблема 1: как проверить, завершился ли вызов os.popen() удачно? В С popen() возвращает NULL при ошибке, а тут я думал прокатит None, ан нет :( На какое значение надо проверять? Или есть специальный метод?

Проблема2: Для работы с буффером прога использует связку dcop+klipper. Как можно НЕ вызывая внешних программ сделать то же самое какими-нить функциями/методами? В качестве либы использую Tkinter. Нашел, как делать такой вызов в wx, как то же самое сделать в Tkinter?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

Нашел в Tkinter методы clipboard_clear() и clipboard_append(), selection_get(). Поэкспериментировал. Оказывается, что первый и последний действуют на буффер только в самой программе, в то время как clipboard_append() вставляет текст в буфер проги, но этот текст еще вставляется в Klipper. Я решил проследить, как работают эти методы и какие методы они сами используют, оказалось, что все они вызывают метод call(). Я попробовал вызывать этот метод с аргументами "clipboard" и "get", но он вываливался в ошибку, поскольку содержимое локального клипбоарда программы пусто :huh:
Я нашел, как делать то, что мне нужно в PyQT, PyGTK, WX..., но в Tkinter почему-то такого нет :(
Если никто не может ответить на этот вопрос, несколько переформулирую задачу: Как одной программе получить то, что выделено мышью в окне другой программы? Т.е. мне нужно что-то вроде того, что делает StarDicts. Как это реализовать?
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: [Python] Буффер обмена

Сообщение polachok »

Как одной программе получить то, что выделено мышью в окне другой программы?

в консоли - sselp
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

polachok писал(а):
22.12.2006 21:54
Как одной программе получить то, что выделено мышью в окне другой программы?

в консоли - sselp

Неа, нужен чисто программный подход. Нужно, чтобы прога не зависела от внешних комманд (на данный момент ей нужны ессно сам python, less, klipper, firefox. С огнелисом я щас разбираюсь, лесс наверно оставлю, меня больше Клиппер волнует). Я мог бы в принципе оставить и Клиппер, но дело в том, что он по дефолту запускается (по крайней мере у меня) только в КДЕ, в ГНОМЕ - после его запуска вручную, а про остальные графические среды я вообще не говорю.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: [Python] Буффер обмена

Сообщение elide »

Неа, нужен чисто программный подход
а какая такая патология мешает тебе открыть исходники sselp и посмотреть? 65 строчек кода - слишком сложно?
слава роботам!
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

elide писал(а):
22.12.2006 22:32
Неа, нужен чисто программный подход
а какая такая патология мешает тебе открыть исходники sselp и посмотреть? 65 строчек кода - слишком сложно?

Как на C делать я знаю, мне нужно на Python.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: [Python] Буффер обмена

Сообщение elide »

python-xlib ?
слава роботам!
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

Ага, самое оно, только она по-моему не входит в стандартную поставку Python
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: [Python] Буффер обмена

Сообщение elide »

хм... твоя программа тоже не входит в стандартную поставку питона. и что?
с каких пор это стало проблемой?
слава роботам!
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

Мне ее поставить - никаких проблем, но все дело в том, что программа должна ставиться на неизвестно какую систему, и пользователю вряд ли понравится выкачав архив с прогой размером пять метров докачивать еще и либу к ней длиной 9 метров, из которой программа использует всего 3-4 функции.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: [Python] Буффер обмена

Сообщение elide »

еще и либу к ней длиной 9 метров
меньше 200кб.
слава роботам!
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: [Python] Буффер обмена

Сообщение Liksys »

Проверил еще раз, да, так и есть :) Видимо, не туда посмотрел :)
Спасибо сказали: