LINUX.ORG.RU

[pygtk] set_back_pixmap работает только интерактивно


0

0

Есть скрипт wpset, кой выставляет обоину на рутовом окне. Однако он не работает, если его запускать как

$ wpset blah.png
а только
$ python
>>> from wpset import *
>>> wp = wpset()
>>> wp.set('blah.png')

Почему?

#! /usr/bin/env python
# wpset, set wallpaper using gdk-pixbuf

import gtk

class wpset:
    def __init__(self):
        self.window = gtk.gdk.get_default_root_window()

    def set(self, imageFile):
        self.pixbuf = gtk.gdk.pixbuf_new_from_file(imageFile)
        self.pixmap, self.mask = self.pixbuf.render_pixmap_and_mask()
        self.window.set_back_pixmap(self.pixmap, False)

    def clear(self):
        self.window.set_back_pixmap(None, False)

if __name__ == '__main__':
    import sys, os

    wp = wpset()
    try:
        wp.set(os.path.expanduser(sys.argv[1]))
    except IndexError:
        wp.clear()

Ответ на: комментарий от plambir

нет, ничего не пишет и set_back_pixmap вовзращает None в обоих случаях. Даже если убрать if main и указать имя файла прямо в скрипте.

$ python wpset.py - не работает

$ python

import wpset - работает


можешь протестировать скрипт? мне интересно, это особенность pygtk или глюк в моей системе

lasso ()

Что-то мне подсказывает, что при завершении скрипта это самое self.window = gtk.gdk.get_default_root_window() уничтожается вместе с установленной обоиной (но до конца я в этом не уверен). Попробуй что ли в конец добавить gtk.main().

//Самому лень проверять…

fat_angel ★★★★★ ()
Ответ на: комментарий от fat_angel

с gtk.main() обоина меняется. Спасибо!

Сменить delete-event у рутового окна че-то не получилось, так что пока использую обходной путь

self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)

lasso ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.