如何将 pygtk Widget 添加到 Glade 调色板?

如何将 pygtk Widget 添加到 Glade 调色板?

假设我创建了一个像这样的 gtk Widget:

class AwesomeTextView (gtk.TextView):

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

如何将新的小部件添加到 Glade Interface Builder 中的调色板?

在此处输入图片描述

答案1

好的,下面我们将一步一步地进行:

  • 我们的小部件将被命名为AwesomeTextView,它所在的模块将被称为awesome_text_view。这些是我们唯一需要的名字。

glade 小部件由两部分组成:模块和目录。

  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>
    

    您应该复制并改编此模板,因为它作品。 :-)

  2. 我们创建一个模块,awesome_text_view.py并(再次以 root 身份)将其保存在/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()

答案2

您需要为您的小部件创建一个目录,请参阅此文件夹:/usr/share/glade3/catalogs/您将看到gnome.xml,查看一个例子。

另请参阅 gnome 文档:

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

答案3

接受的答案(日期为 2011 年)在 2023 年不再适用于 GTK3。它awesome_text_view.py应该是这样的:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GObject
from gi.repository import Gtk
from gi.repository 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 之前使用环境变量GLADE_CATALOG_SEARCH_PATHGLADE_MODULE_SEARCH_PATH

GLADE_CATALOG_SEARCH_PATH=/path/to/awesome_widget/catalogue GLADE_MODULE_SEARCH_PATH=/path/to/awesome_widget/modules glade

最后保存awesome_text_view.py在目录中/path/to/awesome_widget/modules/

相关内容