Показаны сообщения с ярлыком glade. Показать все сообщения
Показаны сообщения с ярлыком glade. Показать все сообщения

суббота, января 06, 2007

И еще одна поделка на python-gtk

Сабж. Сделал удобнейшую вещь - при втыкании в usb-разъем флэшки от фотика появляется окошко "Слить фотки". Выбираем директорию, нажимаем Старт, и начинается процесс. На одном прогрессбаре показывается процесс копирования, потом на другом - процесс проявки из RAW. Т.е. практически аналог соответствующей тулзы из Гнома. Только Гном здесь совсем не нужен, не нужен ни hal, ни dbus, а нужны python, python-gtk2, python-glade-2.

Кстати, долго думал: как при подключении устройства показать окошко? Ну хорошо, любую программу при подключении флэшки можно запустить с помощью строчки где-нибудь в /etc/udev/rules.d наподобие этой:
SUBSYSTEM=="scsi", SYSFS{model}=="CF Card CF", ACTION=="add", RUN="/path/to/program"
Но ведь программа будет запущена с правами демона udevd, вне любых иксов, и вообще не знает, что иксы запущены. Ей бы надо определить, запущены ли иксы вообще, на каком именно дисплее (предусмотреть случай, когда запущены двое иксов - у меня это штатный режим), получить разрешение на подключение к этим иксам, и только тогда можно показывать окошко. Во геморрою-то...
Но, нормальные герои юниксоиды всегда идут в обход!
Обходной путь получился такой. При запуске иксов фоном запускается питоновский скрипт, который каждые 5 секунд проверяет содержимое пайпа /var/run/mphotos. Если там появляется строчка "plugged" - показывается окошко и делается вся работа по копированию и проявке фоток. Иначе ждет дальше. А udev указанным выше способом при подключении флэшки запускает примитивный скрипт, который и записывает строчку "plugged" в пайп /var/run/mphotos. Все.

четверг, января 04, 2007

Swish-e, python-gtk, glade...

Уже довольно давно я пользуюсь замечательным поисковиком swish-e. Он довольно быстро индексирует документы, а потом ищет по созданному индексу (о его близком сородиче, swish++, писал virens). Все бы хорошо, только компьютером я пользуюсь не один, вместе со мно им пользуются далекие от компьютеров родственники. И совсем мне неохота объяснять им про прелести командной строки... Так что понадобилась "графическая морда" к swish-e. Ничего полезного не нашел, пришлось писать самому. Стал подбирать, на чем писать. Прежде всего, логика предельно простая (запустить команду и перехватить стандартный вывод), поэтому желания писать на чем-нибудь типа C/C++ не возникает совсем. В идеале это должен быть bash-скрипт. Но как из bash сделать GUI? Варианты получились такие.

Xdialog. Позволяет что-нибудь спросить у пользователя, например, так:
ANSWER=$(Xdialog --stdout --inputbox "Что ищем?" 10 30)
Нет возможности сделать сколько-нибудь сложный диалог. В данном случае этот вариант отпал.

kaptain. Позволяет создавать довольно сложные диалоги, которые описываются на специальном языке. Но эти диалоги нельзя изменить после создания, т.е. они могут работать только как формы ввода. Кроме того, у kaptain большие проблемы с нелатинскими алфавитами. Опять отпадает.

gtk-server. Практически, представляет собой интерфейс к функциям gtk для любого окружения - для вызова функции нужно записать ее имя и параметры на стандартный вход gtk-server. Практически всем подходит, но shell-script с его использованием больше похож на обычную C-программу с использованием gtk. Пока отложил в сторонку.

А остановился я в итоге на связке python + python-gtk + glade. Python - скриптовый, достаточно высокоуровневый, язык, так что простая логика на нем занимает мало места. Сам интерфейс нарисовал с помощью Glade (визуальный конструктор интерфейсов для gtk), сохранил в .glade-файле (это xml), а из python-скрипта он только подгружается (с помощью python-glade). Скрипт получился довольно скромного размера, соответственно своей простой функциональности. Кому интересно, взять можно здесь: http://portnov84.narod.ru/downloads/sw-search-0.1b.tar.gz (Depends: swish-e, python, python-gtk2, python-glade-2).