2009-12-02 3 views
5

Я - пользователь Linux (в основном ubuntu) с разумным пониманием того, как работает система (хотя я, конечно, не a linux guru!). В прошлом я разработал небольшие кросс-платформенные настольные приложения в python/GTK, и я доставлял их клиентам как автономные файлы, так что единственными зависимостями были сам Python и GTK.Ищете советы по разработке апплетов для Gnome/Ubuntu

Теперь я хотел бы разработать небольшой апплет для убунта, что я хотел бы выпустить под GPL 2 или 3.

В частности, эти новые шаги Я знаю, что я должен научиться в порядке для достижения своей цели (это очень возможно есть несколько больше, что я не в курсе, хотя!):

  • Интеграция с гномом: Я хочу, чтобы мое приложение было доступно как апплет в панели задач.
  • Использование D-bus: В частности, я хочу, чтобы мой апплет использовал новую инфраструктуру уведомления osd для ubuntu, но связь с другими апплетами также является возможной возможностью для второй итерации.
  • Упаковка: Я хотел бы настроить публичный PPA, как только приложение достигнет альфа-стадии, но я также хотел бы использовать зависимости от существующих пакетов в официальных репозиториях, а не включать библиотеки снова в свои собственные пакет.

Конечно официальная документация будет моим первым источником знаний, но - исходя мое суждение на очень полезные ответы, которые я получил на another topic здесь на SO - я решил обратиться к SO сообщества, чтобы собрать дополнительные консультации, как например:

  1. Есть ли дополнительные меры для тех, которые я изложил ранее, что я должен изучить, чтобы иметь возможность реализовать мой проект?
  2. Основываясь на собственном опыте, вы бы посоветовали мне заранее изучить эти шаги (поскольку знание того, что будет влиять на мой способ кодирования основной функциональности), или вы считаете интеграцию с gnome/d-bus и упаковкой как " более высокие уровни инкапсуляции ", которые впоследствии могут быть добавлены поверх основных функциональных возможностей (примечание: D-bus будет использоваться сначала для ввода данных. Входные данные будут получены с помощью webservice)?
  3. Вы бы посоветовали мне отделить мое приложение в двух пакетах (back-end и front-end) или сохранить их вместе в одном пакете ?,
  4. Знаете ли вы какой-либо полезный ресурс, который вы бы мне посоветовали взгляните, для изучения того, что мне нужно?
  5. Знаете ли вы о каких-либо распространенных «ошибках начинающих», о которых я должен знать?

Эти вопросы не являются исчерпывающими, однако: если вы чувствуете, что я что-то из общей картины не хватает, вы более чем приветствуется мне точку в правильном направлении!

PS: Если мне не удалось объяснить мою конечную цель, взгляните на : то, что я хочу достичь, схож с точки зрения пользовательского интерфейса (что означает: апплет должен отображать статус и нажимать на него должен открываться само приложение, из которого вы можете настроить апплет и выполнить различные операции).

ответ

1

Когда я задал этот вопрос два года назад, Ubuntu и Gnome были гораздо ближе друг к другу, чем сегодня. В настоящее время (конец 2011 года) гнома принял гном-оболочку, в то время как Canonical решила разработать свой собственный пользовательский интерфейс (unity) ...

Части напряженности, которая привела к расколу specifically involved libappindicator, что делает так, как я сформулированный этот вопрос (и, вероятно, часть ответов) устарел.

Кроме того, теперь есть AskUbuntu на обмене стеками, что, вероятно, будет гораздо лучшим форумом, чтобы спросить о конкретном вопросе ubuntu.

3

Ну, вы перечислите python, так что вы захотите иметь pynotify в своем арсенале. Он обертывает DBus и дает вам прямой api для управления системой osd-notification.

>>> import pynotify 
>>> pynotify.init("Lil' Applet") 
True 
>>> note = pynotify.Notification(
...   pynotify.get_app_name(), 
...   "Lil' Applet wants you to know something's up.", 
...   "/usr/share/icons/Human/48x48/status/dialog-information.png") 
>>> note.show() 
True 

Это отображает уведомление о том, выглядит следующим образом:

[ ] **Lil' Applet** 
[ICON] 
[ ] Lil' Applet wants you to know something's up. 
+1

Существует небольшая разница между всплывающим уведомлением и полноправным приложением, которое появляется на панели –

+0

. Я хорошо знаю об этом. Я предлагаю это только как часть вашего решения. Следовательно, «вы хотите, чтобы pynotify в вашем арсенале». Я полагал, что другие люди могут перекликаться с другими кусочками головоломки. – jcdyer

+0

Спасибо за это (+1). Я представил себе, что это было бы нечто более сложное ... но эй ... похоже, это работает из коробки !. Это было окончательно полезно. :) – mac

3

Как вы уже знаете, ваш первый и лучший друг будет код, написанный другими - копировать, вставить, рассечь, понять. К счастью, есть несколько проектов, которые делают то, что вы намереваетесь достичь. Я могу порекомендовать conduit's код как основную ссылку, как делать вещи чистым способом. Я думаю, что у них тоже есть материал на dbus. Другие, чтобы следить, были бы deskbar-applet, hamster (хех) и любое другое приложение, которое вы помните, имея функцию X. Иногда это может потребовать некоторого расшифровки кода C (например, бит кнопки апплета - я предлагаю вам лучше взять его из хомяка так как у меня было какое-то основное время, чтобы получить прямо)

Тогда приложение «devhelp» будет очень полезно - оно позволяет вам быстро и легко читать и искать на страницах руководства. Убедитесь, что у вас также есть пакеты -doc для всех модулей, которые вы собираетесь использовать. Для пользовательского интерфейса я настоятельно рекомендую использовать поляну, так как это позволит вам значительно упростить интерфейс. Если вы не можете использовать поле с надписью - добавить и выравнивать и добавить виджет в поле в коде. Там, безусловно, будут причуды и вещи, которые вы изучите с трудом. Не должно быть слишком сложно!

Упаковка, особенно автоматы, будет битвой, но вы получите ее правильно. Для того, как делать debians (и оттуда в PPA), вы можете выкапывать историю хранилища хомяков. Однажды была папка «debian».

Я предлагаю начать с малого - посмотрите, можете ли вы получить окно. Затем наденьте на него кнопку. Вам не нужно делать это «правильно» в первый раз. В первый раз это будет нормально, если что-то работает вообще.

Что касается разделения - я бы не стал беспокоиться об этом, пока вы не доберетесь туда. Разделение на две части и наличие ядра не должно быть слишком тяжелым позже. Но все зависит от ваших приоритетов.

Последняя вещь - помогает получить друзей, которые знают поле. И один из способов найти новых друзей - это участие в других проектах, хе-хе.

+0

Спасибо за различные рекомендации (+1). Glade и devhelp находятся под лентой с момента моего первого проекта, но очень полезно иметь некоторый указатель на некоторый хороший код, на который нужно смотреть. – mac

1

Здесь есть несколько очень хороших рекомендаций, но позвольте мне предположить, что вы разрабатываете свой апплет не столько для «Ubuntu», сколько для «Gnome». Не требуется дополнительных усилий для создания пакетов RPM для таких дистрибутивов, как Fedora и Arch Linux, чтобы назвать два примера. Однако есть один серьезный недостаток - чтобы оставаться совместимым с стабилизатором Debian, вы должны придерживаться древних версий GTK и GLib или, по крайней мере, использовать любую функциональность в зависимости от более новых версий. Это болезненно, но, по-видимому, стабильные пользователи Debian это ценят.

Я также предлагаю как можно раньше установить систему управления исходным кодом.Вы можете не беспокоиться о сбое вашего диска, но иногда это сэкономит вам массу неприятностей только для того, чтобы вернуть все, что вы делали со времени последнего коммита.

Here - ссылка на документацию официальной библиотеки апплетов Gnome Panel. Я не знаю, есть ли привязки Python или нет.

+0

Очень полезно, спасибо! (+1). Я считаю, что привязки для python библиотеки, которую вы мне отправили, находятся в пакете 'python-gnomeapplet'. Система Версии всегда работает и работает (я использую в основном базар). У меня есть дополнительный вопрос, если вы не возражаете: можете ли вы дать мне указатель на то, как упаковка для других дистрибутивов из других дистрибутивов (в случае, если это вообще возможно)? Благодаря! – mac

+0

Теоретически это возможно, но я бы не стал доверять «кросс-упакованным» пакетам. На мой взгляд, лучше всего установить дистрибутив, который вы хотите упаковать, на виртуальной машине (если у вас достаточно быстрая система) или в разделе с двойной загрузкой (если вы этого не сделаете). KVM работал прямо из коробки для меня. – ptomato

Смежные вопросы