假设我创建了一个像这样的 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 小部件由两部分组成:模块和目录。
我们创建一个目录,
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>
您应该复制并改编此模板,因为它作品。 :-)
我们创建一个模块,
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 中,您可以将其添加到您的应用程序中。
最后,你只需要
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 文档:
答案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_PATH
和GLADE_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/