Gladeパレットにpygtkウィジェットを追加する方法


8

次のようなgtkウィジェットを作成したとします。

class AwesomeTextView (gtk.TextView):

    def set_font(self, font_description):
        self.modify_font(pango.FontDescription(font_description))

Glade Interface Builderのパレットに新しいウィジェットを追加するにはどうすればよいですか?

ここに画像の説明を入力してください

回答:


7

さて、これは一歩一歩です。

  • ウィジェットに名前を付けます。ウィジェットが含まれてAwesomeTextViewいるモジュールが呼び出されawesome_text_viewます。これらは私たちが必要とする唯一の名前です。

Gladeウィジェットは、モジュールとカタログの2つの部分で構成されています。

  1. カタログを作成し、awesome_text_view.xml(ルートとして)に保存します/usr/share/glade3/catalogs/

    これは次のようになります。

    <glade-catalog name="awesome_text_view"
        library="gladepython"
        domain="glade-3"
        depends="gtk+">
    
     <init-function>glade_python_init</init-function>
    
     <glade-widget-classes>
       <glade-widget-class title="Awesome TextView"
        name="AwesomeTextView"
        generic-name="awesome_text_view"/>
     </glade-widget-classes>
    
     <glade-widget-group name="python" title="Python">
       <glade-widget-class-ref name="AwesomeTextView"/>
     </glade-widget-group>
    </glade-catalog>

    それはのようにして、このテンプレートをコピーして適応させる必要があります動作します。:-)

  2. モジュールを作成し、awesome_text_view.py(再びルートとして)に保存します/usr/lib/glade3/modules/

    これは次のようになります。

    import gobject
    import gtk
    import pango
    
    
    class AwesomeTextView (gtk.TextView):
    
        __gtype_name__ = 'AwesomeTextView'
    
        def __init__(self):
            gtk.TextView.__init__(self)
    
        def set_font(self, font_description):
            self.modify_font(pango.FontDescription(font_description))

    これでGladeに表示され、アプリケーションに追加できます。

  3. 最後に、あなたはただする必要があります

        export PYTHONPATH="$PYTHONPATH:/usr/lib/glade3/modules/"

それでおしまい!

ウィジェットの使用方法を示す小さなテストアプリを次に示します。

import gtk
import awesome_text_view

class App (object):

    builder = gtk.Builder()

    def __init__(self):
        self.builder.add_from_file("test.glade")
        self.builder.connect_signals(self)
        self.builder.get_object("awesome_text_view1").set_font("mono")
        gtk.main()

    def on_window1_destroy(self, widget):
        gtk.main_quit()


App()

そのため、実際には、コードでカスタムウィジェットを簡単に配布し、貢献者がシステムに手動でインストールしなくても、それをGladeに追加する方法はないと私は理解しています。Gladeはすばらしいです。カスタムウィジェットを追加するには、システムの根幹に入る必要があります。とにかく、いい答えです!
David Planella、2012年

これは、12.04では機能しません。Gladeはこれを出力します:(glade:25053):GladeUI-WARNING **:Failed to load external library 'gladepython'
user1477

1

:あなたは、あなたのウィジェットのカタログを作成し、このフォルダを参照してくださいする必要があり/usr/share/glade3/catalogs/、あなたが参照してくださいよgnome.xml、例えば顔をしています。

gnomeのドキュメントも参照してください。

http://developer.gnome.org/gladeui/stable/catalogintro.html


動作しません:-(ドキュメントが間違っているようです。質問を更新します。また、、gtk+.xmlまたはgnome.xml何らかの理由で欠落していますか?
ステファノパラッツォ

既存のものを変更するのではなく、独自のxmlファイルを作成する必要があります。
Martin Owens -doctormo- 2011

私はそれを理解しました、それは私がgnome.xmlを持っていないだけで、それが問題を示しているのではないかと思いました。あなたが投稿したリンクの説明は、いずれにせよ間違っていますが、まだ修正中です:-)
ステファノパラッツォ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.