J'ai essayé de m'initier à Mono et GTK# (je viens d'un milieu de programmation d'interfaces graphiques Qt/C++) et j'ai décidé de commencer par une interface graphique de test très simple.
J'ai installé le programme d'installation MS Windows Mono/GTK# et ensuite, après avoir constaté que le lien du menu Démarrer vers Glade ne fonctionnait pas (car il ne semblait pas être inclus dans le paquet), j'ai utilisé le programme d'installation binaire Windows "Glade with GTK+" du site Web de Glade.
J'ai ensuite créé une interface graphique très simple dans Glade (en bas de cet article) et écrit mon premier bout de code C# pour l'afficher. Cependant, cela ne semble pas fonctionner correctement.
Le message "Hello, World !" est correctement imprimé sur la console, puis le programme se bloque sans que la fenêtre n'apparaisse ou qu'aucun message d'erreur ne soit imprimé. Il semble que la fenêtre ait été créée et que la boucle d'événements ait démarré, mais qu'elle ne soit pas rendue visible. J'ai essayé de supprimer le premier null
de la new Glade.XML
et ne pas inclure le fichier glade comme ressource, mais cela n'a fait aucune différence.
J'ai également essayé de remplacer le xml de l'interface graphique de Glade par celui de la page le GtkSharpBeginnersGuide sur le site web de mono (et en changeant wndTestWindow
a window1
dans le code C#) et il semble fonctionner parfaitement, ce qui implique qu'il y a un problème avec mon Glade XML. Cependant, j'ai du mal à comprendre ce qui ne va pas avec le XML créé par mon installation Glade. Quelqu'un peut-il me donner des suggestions ?
Glade GUI :
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="wndTestWindow">
<property name="title" translatable="yes">Test Window</property>
<property name="window_position">center</property>
<child>
<widget class="GtkVBox" id="vboxTopLevel">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<widget class="GtkHBox" id="hboxComboList">
<property name="visible">True</property>
<child>
<widget class="GtkLabel" id="lblList">
<property name="visible">True</property>
<property name="label" translatable="yes">Here's a list:</property>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="cmbList">
<property name="visible">True</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="btnList">
<property name="label" translatable="yes">Do something</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkHButtonBox" id="hbtnboxButtonRow">
<property name="visible">True</property>
<child>
<widget class="GtkButton" id="btnOK">
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="btnCancel">
<property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
Code de test C# :
using Glade;
using Gtk;
using System;
class TestApplication
{
static void Main(string[] args)
{
System.Console.Write("Hello, World!\n");
new TestApplication(args);
}
public TestApplication(string[] args)
{
Gtk.Application.Init();
Glade.XML gxml = new Glade.XML(null, "test_mono.glade", "wndTestWindow", null);
gxml.Autoconnect(this);
Gtk.Application.Run();
}
}
Compilé et exécuté avec :
mcs -pkg:glade-sharp-2.0 -resource:test_mono.glade test_mono.cs
mono .\test_mono.exe
Versions :
Windows : XP Service Pack 3 Glade : 3.6.7 MCS version 2.6.7.0 Mono et GTK# sont installés en utilisant mono-2.6.7-gtksharp-2.12.10-win32-2.exe
sur le site web de Mono.
Compilé et testé à la fois avec cygwin et avec l'invite de commande "Mono-2.6.7".