繁体   English   中英

如何在C#中使用gtk生成器

[英]How do I use gtk builder in c#

根据我如何在C#中使用GtkBuilder连接空地信号? 在2009年,mono的开发人员即将将gtk构建器实现为c#。 现在是2013年,建议的方法仍然不可用。 那么有没有办法使用它呢?

由于GtkBuilder替换了glade格式,所以整个glade似乎对c#没用(至少glade编辑器将文件另存为GtkBuilder格式,libglade无法在mono中读取)

是的,可以在C#中使用GTK Builder,而不必使用Glade库。 (顺便说一下,我在Boo上也取得了成功;还没有在Cobra上取得成功,也没有尝试过[Iron] Python或[Iron] Ruby。)

想要使用GTK构建器而不是Glade库的一个非常有力的理由是,AFAIK(3.8版之后的Glade版本)产生的XML代码仅与GTK + 3兼容( 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”。

togglebuttons.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 :-)

好吧,由于我还是GTK#的新手,所以我不知道是否实现了builder对象,但是Autoconnect()方法确实适用于Glade.XML对象,这就是我在林间中连接信号的方式xml。 下面是一个简单的helloworld c#程序的工作示例,该程序使用Autoconnect发出信号:

(我有GTK#2.12.20和Glade 3.4.3)

使用系统; 使用Gtk; 使用Glade;

名称空间textPad {公共类GladeApp {公共静态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 ();
    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM