0

C# で GtkBuilder を使用してグレード信号を接続するにはどうすればよいですか? 2009 年、mono の開発者は gtk ビルダーを c# に実装しようとしていました。2013 年ですが、提案された方法はまだ利用できません。それで、それを使用する方法はありますか?

GtkBuilder がグレイド形式に取って代わったため、グレイド全体は c# では役に立たないようです (少なくともグレイド エディタはファイルを GtkBuilder 形式で保存しており、libglade ではモノラルで読み取ることはできません)。

4

2 に答える 2

3

はい、Glade ライブラリを使用しなくても、C# で GTK Builder を使用できます。(ちなみに、私はこれを Boo でも成功させました。Cobra では成功しておらず、[Iron]Python や [Iron]Ruby も試していません。)

Glade ライブラリの代わりに GTK ビルダーを使用したいという非常に強い理由の 1 つは、私の知る限り、3.8 以降の Glade バージョンが GTK+3 とのみ互換性のある XML コードを生成することです ( http://blogs.gnome.org/tvb/2011/ 01/15/the-glade-dl/ )。さらに、GTK Builder を使用すると、適切な定義を生成するほぼすべての GUI ビルダーによって生成された XML ファイルを使用できるようになると思います。

さて、MonoBasic の例を C# に適用したソリューションを次に示します: http://www.mono-project.com/GtkSharp:_Hello_World。この例の GUI 定義を使用して Glade 3.14.2 で GUI を作成し、そのファイルを単純に「togglebuttons.xml」として保存しました。

トグルボタン.cs:

using Gtk;
using System;

class ToggleButtons
{
    public ToggleButtons()
    {
        Gtk.Application.Init();
        Builder Gui = new Builder();
        Gui.AddFromFile("togglebuttons.xml");
        Gui.Autoconnect(this);
        Gtk.Application.Run();
    }

    static void onDeleteEvent(object o, DeleteEventArgs args)
    {
        Application.Quit();
    }

    static void onExitButtonEvent(object o, EventArgs args)
    {
        Application.Quit();
    }

    public static void Main()
    {
        new ToggleButtons();
    }
}

Glade によって生成された XML ファイル、togglebuttons.xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">Toggle Buttons</property>
    <signal name="delete-event" handler="onDeleteEvent" swapped="no"/>
    <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="GtkToggleButton" id="togglebutton1">
            <property name="label" translatable="yes">Button 1</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="halign">center</property>
        </object>
        <packing>
            <property name="expand">True</property>
            <property name="fill">False</property>
            <property name="position">0</property>
        </packing>
        </child>
        <child>
        <object class="GtkToggleButton" id="togglebutton2">
            <property name="label" translatable="yes">Button 2</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="halign">center</property>
        </object>
        <packing>
            <property name="expand">True</property>
            <property name="fill">False</property>
            <property name="position">1</property>
        </packing>
        </child>
        <child>
        <object class="GtkSeparator" id="separator1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
        </object>
        <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
        </packing>
        </child>
        <child>
        <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">Close</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="halign">center</property>
            <signal name="clicked" handler="onExitButtonEvent" swapped="no"/>
        </object>
        <packing>
            <property name="expand">True</property>
            <property name="fill">False</property>
            <property name="position">3</property>
        </packing>
        </child>
    </object>
    </child>
</object>
</interface>

HTH :-)

于 2013-10-14T01:11:04.523 に答える
0

まあ、私は GTK# も初めてなので、ビルダー オブジェクトが実装されているかどうかはわかりませんが、Autoconnect() メソッドは実際に Glade.XML オブジェクトに対して機能し、それが私のグレードでシグナルを接続する方法です。 xml。以下は、シグナルに Autoconnect を使用する単純な helloworld c# プログラムの実例です。

(私は GTK# 2.12.20 と Glade 3.4.3 を持っています)

システムを使用して; Gtk を使用します。グレードを使用して;

名前空間 textPad { public class GladeApp { public static void Main(string[] args) { new GladeApp (); }

    public GladeApp(){
        //System.Console.WriteLine ("Hello GTK");
        //System.Console.Read ();
        Gtk.Application.Init ();

        Glade.XML gxml = new XML (null,@"textPad.FirstTextpad.glade","window1",null);

        gxml.Autoconnect (this);


        Gtk.Application.Run ();
        //return 0;
    }

    public void btnExit_clicked_cb(System.Object sender,System.EventArgs e)
    {
        close (null,null);
    }

    public void close(System.Object sender, System.EventArgs e)
    {
        Application.Quit ();
    }
}
}
于 2013-03-24T19:07:52.067 に答える