1

这是我在 Stack Overflow 上的第一篇文章——我不是专业的开发人员,当我在我的一个小实验中遇到问题时,它总是相当简单,我通常会在已回答的问题中找到解决方案。这一次我的搜索没有成功,所以我怕我不得不公开我的无知......

我有兴趣学习为 mate-panel 开发 Python 小程序。我在网上找到了很多例子,包括这里的 SO。但是,我发现的所有示例都没有附有足够的注释让我理解代码的作用。此外,我曾尝试运行其中一些,但我无法让它们工作,而且在不了解机制的情况下很难排除故障。这是我到目前为止发现的:

  • 这个问题链接了一些听起来很有希望的文档,但是该链接现在似乎已失效。
  • 一个名为MATE University的 github 存储库承诺面向所有能力的程序员——不幸的是,它只包含一些最小的、未注释的代码。相关“文档”的链接也已失效。总的来说,它看起来像是一个废弃的项目(我的印象得到了它在遗留档案中的证实)。
  • MATE wiki似乎是个好去处,但同样只有一个未注释的示例。

我还发现了一些论坛问题,人们对他们的代码进行故障排除,但没有一个能让我走得太远。

理想情况下,如果有人可以为我提供有用的参考,我将不胜感激。或者,如果有人能回答我关于 wiki 中示例的问题,我将非常感激。

作为参考,这里是小程序的代码,在 Python 中:

#!/usr/bin/env python

    # this code is based on example appet by Vincent Untz for GNOME Panel 3
    # https://git.gnome.org/browse/gnome-panel/commit/?id=5ad4d9e

    # ensure we are using Gtk 2, not Gtk3
    # this will print a warning but everything should work
    import gi
    gi.require_version("Gtk", "2.0")

    from gi.repository import Gtk
    from gi.repository import MatePanelApplet

    def applet_fill(applet):

        # you can use this path with gio/gsettings
        settings_path = applet.get_preferences_path()

        label = Gtk.Label("My MATE applet in Python")
        applet.add(label)
        applet.show_all()

    def applet_factory(applet, iid, data):
        if iid != "TestApplet":
           return False

        applet_fill(applet)

        return True

    MatePanelApplet.Applet.factory_main("TestAppletFactory", True,
                                        MatePanelApplet.Applet.__gtype__,
                                        applet_factory, None)

我对此的问题是:

  1. 我见过的所有示例都至少包含两个函数,分别称为“applet_fill”和“applet_factory”。很容易看出,“applet_fill”采用了一个行为类似于 Gtk 容器的小程序对象,这里是用小部件填充小程序的代码。这是全部还是还有更多?
  2. “applet_factory”的作用是什么?返回值是什么意思?什么是“iid”论点?“数据”是字典吗?我怀疑“数据”可能是下面“factory_main”函数的最后一个参数,对吗?
  3. 说到这里:什么是“factory_main”,它的论点是什么?我想这是执行小程序的功能,对吗?我尝试在其上调用 help(),结果令人沮丧地没有帮助。

除了 python 脚本,wiki 还“引入”了两个附加文件:

    [Applet Factory]
    Id=TestAppletFactory
    InProcess=false
    Location=/home/user/applet/testapplet.py
    Name=Test Applet Factory
    Description=A MATE Python Applet example factory

    [TestApplet]
    Name=Test
    Description=A MATE Python Applet example
    Icon=mate
    MateComponentId=OAFIID:MATE_TestApplet;

和:

[D-BUS Service]
Name=org.mate.panel.applet.TestAppletFactory
Exec=/home/user/applet/testapplet.py

我的问题非常基本:这些文件的功能是什么,它们里面有什么?

我希望这个问题不会太不合标准。任何帮助将不胜感激。

4

0 回答 0