You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Glade中暴露GTK3自定义控件属性的问题排查

问题:GTK自定义控件属性在Glade中显示的问题

核心问题

我已经在GTK中添加了自定义控件,现在想给这个控件添加属性并让它在Glade编辑器中显示,这是否可行?

我已经按照常规方法为自定义控件添加了属性,但这些属性并未在Glade中显示。


更新:尝试通过Glade Catalog定义属性

发现可以通过Glade的catalog文件,用<parameter-spec>元素定义要暴露给Glade的属性,示例如下:

<glade-widget-class title="Awesome TextView" name="AwesomeTextView" generic-name="awesome_text_view">
    <properties>
        <property id="num_fidgets" name="Number of fidgets" default="4" save="False" custom-layout="True">
        <parameter-spec>
            <type>GParamInt</type>
            <min>4</min>
        </parameter-spec>
        <tooltip>The number of fidgets</tooltip>
        </property>
    </properties>
</glade-widget-class>

我按照这个方式定义了属性,但Glade不仅没显示属性,还抛出错误:

GLib-GObject-CRITICAL **: 16:07:45.433: g_object_set_is_valid_property: object class 'AwesomeTextView' has no property named 'num-fidgets'

我的自定义控件定义大致如下:

class AwesomeTextView (Gtk.TextView):
    __gtype_name__ = 'AwesomeTextView'
    
    num_fidgets = GObject.Property(type=int, default='4', nick='num_Fidgets')

原以为<parameter-spec>没有相关文档,后来发现可以在Glade的官方仓库示例中找到支持的<type>类型。
修正:<parameter-spec>是有官方文档的,可结合Glade官方仓库中的示例了解支持的<type>类型。


更新2:修复属性定义错误,但仍不显示

已经找到报错原因:属性默认值类型错误,应该是int而非字符串'4'。修正后的属性定义如下:

num_fidgets = GObject.Property(type=int, default=4, nick='num_Fidgets')

现在Glade不再报错,但属性依然没有在UI界面中显示。


内容的提问来源于stack exchange,提问作者Olumide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:22:44