【问题标题】:Looking for advice on how to develop applets for Gnome / Ubuntu寻找有关如何为 Gnome / Ubuntu 开发小程序的建议
【发布时间】:2010-12-22 08:59:33
【问题描述】:

我是一个 linux(主要是 ubuntu)用户,对系统的工作原理有合理的了解(尽管我当然 不是 linux 大师!)。过去我在 python/GTK 中开发了小型跨平台桌面应用程序,并将它们作为自包含文件树交付给客户端,因此唯一的依赖项是 Python 本身和 GTK。

现在我想为 ubuntu 开发一个小程序,我想在 GPL 2 或 3 下发布。

特别是这些是新的步骤我知道我必须学习以实现我的目标(这是很有可能还有一些我不知道,不过!):

  • 与 gnome 集成:我希望我的应用程序可以作为小程序在任务栏中使用。
  • 使用 D-bus: 特别是我希望我的小程序使用 ubuntu 的新 osd-notification 框架,但与其他小程序通信也是第二次迭代的可能功能。
  • 打包:我想在应用程序达到 alpha 阶段后立即设置一个公共 PPA,但我也想使用官方 repos 中现有包的依赖项,而不是再次将库包含在我自己的包裹。

当然,官方文档将是我的第一个知识来源,但是 - 根据我在 SO 上another topic 收到的非常有用的答案,我决定求助于 SO 社区来收集更多建议,例如示例:

  1. 除了我之前概述的步骤之外,我是否需要学习其他步骤才能实施我的项目?
  2. 根据您自己的经验,您是否建议我提前学习这些步骤(因为这些知识会影响我编写核心功能的方式)或者您是否会考虑与 gnome / d-bus 和打包集成为“更高的封装级别”,可以在之后添加到核心功能之上(注意:D-bus 将首先用于推送数据。输入数据将通过网络服务检索)?
  3. 您是否建议我将我的应用程序分成两个包(后端和前端)或将其放在一个包中?
  4. 您是否知道任何有用的资源,您会建议我查看以学习我必须学习的任何东西?
  5. 您是否知道我应该注意的任何常见的“初学者错误”?

这些问题并非详尽无遗:如果您觉得我在总体情况中遗漏了什么,我们非常欢迎您为我指明正确的方向!

PS:如果我无法解释我的最终目标,请看project hamster:我想要实现的用户界面类似(意思是:小程序应该显示状态并单击它应该打开应用程序本身,您可以从中配置小程序并执行各种操作)。

【问题讨论】:

    标签: python linux ubuntu gnome dbus


    【解决方案1】:

    好吧,您列出了 python,因此您希望在您的武器库中拥有 pynotify。它封装了 DBus,并为您提供了用于操作 osd-notification 系统的直接 api。

    >>> 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.
    

    【讨论】:

    • 通知弹出窗口和显示在面板中的成熟应用程序之间存在一些差异
    • 我很清楚这一点。我只是建议将此作为您解决方案的一部分。因此“你会希望在你的武器库中拥有 pynotify。”我认为其他人可以加入拼图的其他部分。
    • 感谢 (+1)。我想象它会变得更加复杂......但是嘿......这似乎是开箱即用的!这绝对是有用的。 :)
    【解决方案2】:

    如您所知,您的第一个也是最好的朋友将是别人编写的代码——复制、粘贴、剖析、理解。 幸运的是,有一些项目可以实现您想要实现的目标。 我可以推荐conduit's 代码作为如何以干净的方式做事的主要参考。我认为他们在 dbus 上也有东西。其他需要关注的可能是deskbar-applet、hamster(呵呵),以及您记得的任何其他具有功能 X 的应用程序。有时它可能需要一些 C 代码解密(例如小程序按钮位 - 我建议您更好把它从仓鼠那里拿走,因为我正忙着把事情弄清楚)

    然后“devhelp”应用程序将提供很大帮助 - 它允许您快速轻松地阅读和搜索手册页。确保您还拥有您打算使用的所有模块的 -doc 包。 对于用户界面,我强烈建议使用 glade,因为这将使您以后更容易更改界面。不能使用 glade 的地方 - 添加和对齐框并在代码中的框中添加小部件。 肯定会有一些怪癖和你会很难学到的东西。不过应该不会太难!

    包装,尤其是自动工具会有点困难,但你会做对的。关于如何做 debians(以及从那里到 PPA),你可以在仓鼠的存储库历史中挖掘。曾经有一个“debian”文件夹。

    我建议从小处着手 - 看看你能不能得到一个窗口。然后在上面放一个按钮。 您不必第一次就“正确”地做。第一次没问题,如果有什么效果的话。

    至于分离 - 在你到达那里之前我不会打扰它。分成两部分并有一个核心,以后应该不会太难。但这一切都取决于您的优先事项。

    最后一件事 - 结交了解该领域的朋友也有帮助。结交新朋友的一种方法是参加其他项目,呵呵。

    【讨论】:

    • 感谢您的各种建议 (+1)。自从我的第一个项目以来,Glade 和 devhelp 就很好,但实际上,有一些指向一些好的代码的指针非常有帮助。
    【解决方案3】:

    这里已经有一些非常好的建议,但是让我建议您开发您的小程序,而不是“为 Ubuntu”开发您的小程序,而是“为 Gnome”开发。为 Fedora 和 Arch Linux 包等发行版制作 RPM 包并不需要太多额外的努力,仅举两个例子。但是有一个主要缺点——为了与 Debian stable 保持兼容,您必须坚持使用旧版本的 GTK 和 GLib,或者至少使任何取决于新版本的功能可选。这很痛苦,但显然 Debian 稳定用户对此表示赞赏。

    我还建议尽早在某处建立源代码管理系统。您可能并不担心磁盘崩溃,但有时只需能够恢复自上次提交以来所做的所有事情,就可以为您省去很多麻烦。

    Here 是官方 Gnome Panel Applet 库文档的链接。我不知道它是否有 Python 绑定。

    【讨论】:

    • 非常有帮助,谢谢! (+1)。我相信您发送给我的库的 python 绑定在 python-gnomeapplet 包中。版本控制系统总是启动并运行(我主要使用集市)。如果您不介意,我还有一个问题:您能否给我一些关于如何从另一个发行版中打包其他发行版的指示(以防万一)?谢谢!
    • 理论上可行,但我不相信“交叉打包”的包。在我看来,最好的办法是在虚拟机(如果你有一个相当快的系统)或双引导分区(如果你没有)上安装你想要打包的发行版。 KVM 对我来说开箱即用。
    【解决方案4】:

    两年前当我问这个问题时,Ubuntu 和 Gnome 比现在更接近。目前(2011 年底)gnome 采用了 gnome-shell,而 Canonical 决定开发自己的 UI (unity)...

    导致分裂specifically involved libappindicator 的部分紧张局势使我提出这个问题的方式(可能还有部分答案)过时了。

    此外,现在有 AskUbuntu 在堆栈交换上,这可能是一个更好的论坛来询问特定于 ubuntu 的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多