这是我在 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)
我对此的问题是:
- 我见过的所有示例都至少包含两个函数,分别称为“applet_fill”和“applet_factory”。很容易看出,“applet_fill”采用了一个行为类似于 Gtk 容器的小程序对象,这里是用小部件填充小程序的代码。这是全部还是还有更多?
- “applet_factory”的作用是什么?返回值是什么意思?什么是“iid”论点?“数据”是字典吗?我怀疑“数据”可能是下面“factory_main”函数的最后一个参数,对吗?
- 说到这里:什么是“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
我的问题非常基本:这些文件的功能是什么,它们里面有什么?
我希望这个问题不会太不合标准。任何帮助将不胜感激。