web-dev-qa-db-ja.com

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

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

class AwesomeTextView (gtk.TextView):

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

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

enter image description here

8
Stefano Palazzo

さて、これは段階的になります:

  • ウィジェットの名前はAwesomeTextViewになり、ウィジェットが含まれるモジュールはawesome_text_viewと呼ばれます。必要な名前はこれらのみです。

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

  1. カタログawesome_text_view.xmlを作成し、(rootとして)/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>
    

    このテンプレートをコピーして適用する必要がありますworks。 :-)

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

    これは次のようなものです。

    import gobject
    import gtk
    import pango
    
    
    class AwesomeTextView (gtk.TextView):
    
        __gtype_= '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()
7
Stefano Palazzo

ウィジェット用のカタログを作成する必要があります。次のフォルダーを参照してください:/usr/share/glade3/catalogs/ _gnome.xmlが表示されますので、例を見てください。

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

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