簡體   English   中英

無法使用Gtk Builder加載glade文件。 Gtk3#

[英]Cannot load glade file with Gtk Builder. Gtk3#

(注意:我沒有寫這個代碼,它是從一個插件項目模板生成的)

當我嘗試使用帶有Gtk#的GTK Builder來加載glade文件時,會拋出一個異常,即文件必須以元素開頭。

錯誤:

GLib.GException has been thrown
Error on line 1 char 1: Document must begin with an element 
(e.g. <book>)

MainWindow.glade:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
    <requires lib="gtk+" version="3.0" />
    <object class="GtkWindow" id="window1">
        <property name="can_focus">False</property>
        <child>
            <object class="GtkBox" id="box1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="orientation">vertical</property>
                <child>
                    <object class="GtkLabel" id="label1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="yalign">0.47999998927116394</property>
                        <property name="label" translatable="yes">Hello World! This button has been clicked 0 time(s).</property>
                    </object>
                    <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                    </packing>
                </child>
                <child>
                    <object class="GtkButton" id="button1">
                        <property name="label" translatable="yes">Click me!</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="receives_default">True</property>
                    </object>
                    <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                    </packing>
                </child>
            </object>
        </child>
    </object>
</interface>

MainWindow.cs:

using System;
using Gtk;
using UI = Gtk.Builder.ObjectAttribute;

public partial class MainWindow: Gtk.Window
{
    Builder builder;

    [UI] Gtk.Button button1;
    [UI] Gtk.Label label1;

    int clickedTimes;

    public static MainWindow Create ()
    {
        Builder builder = new Builder (null, "DiscordEditor.interfaces.MainWindow.glade", null);
        return new MainWindow (builder, builder.GetObject ("window1").Handle);
    }

    protected MainWindow (Builder builder, IntPtr handle) : base (handle)
    {
        this.builder = builder;

        builder.Autoconnect (this);
        DeleteEvent += OnDeleteEvent;

        button1.Clicked += onButtonClick;
    }

    protected void onButtonClick (object sender, EventArgs a)
    {
        clickedTimes++;
        label1.Text = string.Format ("Hello World! This button has been clicked {0} time(s).", clickedTimes);
    }

    protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    {
        Application.Quit ();
        a.RetVal = true;
    }
}

我不明白為什么會發生這種情況,除非它是GTK#3的一個錯誤,因為它尚未完全發布。 我真的想用GTK3代替GTK2,所以有人會建議嗎?

編輯:我通過打開生成的文件並將其保存為GTKBuilder格式來修復它。

我在外部修改glade文件時遇到了同樣的錯誤。 這是因為我使用的是一個我歸零的緩沖區,並沒有正確設置實際的文件大小。 我認為這不重要,但設置eof正確修復了錯誤。 不確定它是否與你的相同(多年以后這不重要)但也許是因為類似的東西。 似乎是gtk的glade閱讀器中的一個錯誤不是非常強大。

為我修復類似問題的原因是將.glade文件的內容復制到具有新名稱的文件並在代碼中加載該文件。 我無法解釋為什么會這樣,但確實如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM