2010-08-31 8 views
4

J'ai essayé de démarrer avec Mono & GTK # (je viens d'un arrière-plan de programmation GUI Qt/C++) et j'ai décidé de commencer avec une interface graphique de test très simple. J'ai installé le programme d'installation MS Windows Mono/GTK # puis, en constatant que le lien du menu Démarrer de Glade ne fonctionnait pas (car il ne semblait pas être inclus dans le paquet), j'ai utilisé le "Glade" avec GTK + "Windows installateur binaire à partir du site Web de Glade. J'ai ensuite créé une interface graphique très simple dans Glade (en bas de ce post) et écrit mon premier bit de code C# pour l'afficher. Cependant, cela ne semble pas fonctionner correctement.Premiers pas avec Mono, C# et Glade #: Comment faire apparaître une fenêtre?

Le "Bonjour, le monde!" est imprimé correctement sur la console, puis le programme se bloque sans que la fenêtre n'apparaisse ou que des messages d'erreur soient imprimés. Il semble que la fenêtre a été créée et que la boucle d'événements a démarré mais qu'elle n'est pas rendue visible. J'ai essayé de supprimer le premier null de la ligne new Glade.XML et ne pas inclure le fichier glade comme une ressource, mais cela n'a fait aucune différence.

J'ai aussi essayé de remplacer l'interface XML Glade avec celui sur the GtkSharpBeginnersGuide on the mono website (et le changement wndTestWindow-window1 dans le code C#) et il semble fonctionner parfaitement ce qui implique qu'il ya un problème avec mon XML Glade. Cependant, j'ai du mal à comprendre ce qui ne va pas avec le XML créé par mon installation Glade. Quelqu'un peut-il offrir des suggestions?

GUI Glade:

<?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> 

C# Code d'essai:

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:

de Windows: XP Service Pack 3 Glade: 3.6.7 MCS Version 2.6.7.0 Mono & GTK # installé en utilisant mono-2.6.7-gtksharp-2.12.10-win32-2.exe à partir du site web Mono.

Compilé & testé à la fois en utilisant cygwin et le "Mono-2.6.7 Invite de commandes".

Répondre

6

Essayez d'ajouter <property name="visible">True</property> à votre widget racine afin qu'il se lise:

<?xml version="1.0"?> 
<glade-interface> 
    <!-- interface-requires gtk+ 2.12 --> 
    <!-- interface-naming-policy project-wide --> 
    <widget class="GtkWindow" id="wndTestWindow"> 
    <property name="visible">True</property> 
    <property name="title" translatable="yes">Test Window</property> 
    <property name="window_position">center</property> 
    <child> 

En Glade la propriété se trouve sous l'onglet Propriétés communes pour la fenêtre.

+0

Brillant, c'était ça: merci.Je n'ai pas assez de réputation pour voter, mais j'ai accepté la réponse. – NPB

1

Vous voudrez peut-être regarder le téléchargement de MonoDevelop pour Windows. Gtk # n'a pas vraiment utilisé Glade depuis longtemps. Généralement, il utilise Stetic, qui a un concepteur intégré dans MonoDevelop.

http://monodevelop.com/

+0

Merci, mais il semble que Stetic soit très difficile à utiliser à moins que vous ne vouliez utiliser MonoDevelop pour tout (ce que je ne fais pas). J'ai essayé de le charger juste pour créer une interface graphique avec Stetic, mais je n'ai pas trouvé le moyen de le faire sans créer un projet entier. Je suis assez content de l'IDE que j'utilise: je n'aime pas utiliser un IDE différent pour différentes langues. – NPB

Questions connexes