根据如何在 C# 中使用 GtkBuilder 连接空地信号?2009 年,mono 的开发人员即将实现 gtk builder 到 c#。现在是 2013 年,建议的方法仍然不可用。那么有没有什么方法可以使用呢?
由于 GtkBuilder 取代了 glade 格式,整个 glade 的东西似乎对 c# 没有用(至少 glade 编辑器将文件保存为 GtkBuilder 格式,libglade 在单声道中无法读取)
根据如何在 C# 中使用 GtkBuilder 连接空地信号?2009 年,mono 的开发人员即将实现 gtk builder 到 c#。现在是 2013 年,建议的方法仍然不可用。那么有没有什么方法可以使用呢?
由于 GtkBuilder 取代了 glade 格式,整个 glade 的东西似乎对 c# 没有用(至少 glade 编辑器将文件保存为 GtkBuilder 格式,libglade 在单声道中无法读取)
是的,可以在 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”。
切换按钮.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# 的新手,但 Autoconnect() 方法确实适用于 Glade.XML 对象,这就是我在我的空地中连接信号的方式xml。下面是一个简单的 helloworld c# 程序的工作示例,它使用 Autoconnect 作为信号:
(我有 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 ();
}
}
}