5

そこで、C GNOMEアプレットをMATEに移植しようとして、さまざまな問題が発生した後、Pythonで最初から書き直すことにしました。最終的に、私はいくつかの時代遅れではないドキュメントを見つけました。これはここにあります:http ://wiki.mate-desktop.org/docs:devel:mate-panel

どうやら、Pythonでアプレットを作成する新しい方法は、「古い」PyGtkの代わりにPyGObjectイントロスペクションを使用することです。

だから私はいくつかの質問があります:

1. Why is it better to use PyGObject instead of PyGtk etc
2. Is the end user who downloads a python applet expected to have pygobject installed? It looks like it.
3. The MATE documentation says 'ensure we are using Gtk 2, not Gtk3', but http://python-gtk-3-tutorial.readthedocs.org/en/latest/install.html says that its exclusively supports Gtk+ 3 and higher.

編集:私が実行した場合

import gi
gi.require_version("Gtk", "2.0")

Pythonセッションで、次の警告が表示されます。

RuntimeWarning: You have imported the Gtk 2.0 module.  Because Gtk 2.0 was not designed for use with introspection some of the interfaces and API will fail.  As such this is not supported by the pygobject development team and we encourage you to port your app to Gtk 3 or greater. PyGTK is the recomended python module to use with Gtk 2.0

これは質問3にほぼ答えますが、質問1が再び表示されます。また、libmatepanelapplet-devをインストールしていても、実行from gi.repository import MatePanelAppletするとImportErrorが発生します。Could not find any typelib for MatePanelApplet

もう一度編集:ここでImportErrorの解決策を見つけました:gi.repositoryからWebkitをインポートできませんgir1.2-mate-panel( Webkitの代わりにインストールするだけです)

そしてより多くのエラー:

./xmonad-log-applet.py:66: Warning: g_closure_set_marshal: assertion `closure != NULL' failed
  applet = MatePanelApplet.Applet()

(xmonad-log-applet.py:10928): GLib-GIO-CRITICAL **: g_dbus_connection_register_object: assertion `G_IS_DBUS_CONNECTION (connection)' failed
Segmentation fault (core dumped)
4

1 に答える 1

3

MATEはGNOME2のフォークであるため、(受け取ったメッセージとして)PyGTKを使用する必要があります。

各質問について:

  1. PyGObjectは、ライブラリ(イントロスペクションを提供するもの)への単一のバインディングのみが必要であり、GOBjectイントロスペクションをサポートするすべてのライブラリのパブリックAPIに自動的にアクセスできるため、より優れています。開発者にとっては、新しいリリースごとにバインディングを待たずに、Cと同じAPIにアクセスできるので便利です。

  2. はい。しかし、ユーザーはおそらく持っているでしょう。GNOME 3のオッズは100%ですが、GNOME 2(MATE)は必要ないため、それよりも少なくなります。

  3. 質問のようには見えません。前に述べたように、MATEはGNOME 2用であるため、GNOME2で使用可能なライブラリとドキュメントを使用する必要があります。

PythonでGNOME2用に作成されたアプレットを確認できます(GNOMEがBonoboを削除した後)。たとえば、hasmter。一部の名前を変更する必要がある場合があります。おそらく、MATEではライブラリ名の名前がGNOMEからMATEに変更されています。

于 2013-01-06T08:37:52.767 に答える