Erste Schritte mit Mono, C # und Glade # gestartet: Wie machen Fenster erscheinen?
Frage
Ich habe versucht, mit Mono & GTK # loszulegen (ich komme aus einem Hintergrund von Qt / C ++ GUI-Programmierung) und entschied mit einem sehr einfachen Test GUI zu starten.
ich den MS Windows Mono / GTK # Installer installiert und dann, nachdem er festgestellt, dass das Startmenü Link zu Glade funktioniert nicht (wie es nicht im Paket enthalten zu sein schien), habe ich die „Glade mit GTK +“Windows binäres Installationsprogramm von der Glade Website.
ich dann eine sehr einfache GUI in Glade (am unteren Ende dieses Beitrags) erstellt und schrieb mein erstes Bit von C # -Code, um sie anzuzeigen. Allerdings scheint es nicht richtig zu funktionieren.
Die "Hallo, Welt!" gedruckt wird, an die Konsole korrekt und dann geht das Programm hängt, ohne das Fenster erscheinen, oder Fehlermeldungen gedruckt werden. Es scheint, als ob das Fenster und die Ereignisschleife gestartet wird erstellt wurde, aber dass es nicht sichtbar gemacht wird. Ich habe versucht, den ersten null
aus der new Glade.XML
Linie zu entfernen und nicht die Lichtung Datei als eine Ressource, einschließlich, aber das machte keinen Unterschied.
Ich habe mit dem man auch versucht, die Glade GUI xml ersetzt auf die GtkSharpBeginnersGuide auf der Mono-Webseite (und wndTestWindow
zu window1
im C # -Code zu ändern) und es scheint zu funktionieren perfekt was bedeutet, dass es ein Problem mit meiner XML Glade. Aber ich finde es schwer, herauszufinden, was mit der XML falsch ist durch meine Glade Installation erstellt. Kann jemand bieten Anregungen?
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>
C # Testcode:
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();
}
}
kompiliert und ausgeführt mit:
mcs -pkg:glade-sharp-2.0 -resource:test_mono.glade test_mono.cs
mono .\test_mono.exe
Versionen:
Windows-: XP Service Pack 3
Glade: 3.6.7
MCS Version 2.6.7.0
Mono & GTK # installiert mono-2.6.7-gtksharp-2.12.10-win32-2.exe
von der Mono Website.
Zusammengestellt und getestet sowohl mit Cygwin und die "Mono-2.6.7 Eingabeaufforderung".
Lösung
Versuchen Sie, Ihre Wurzel Hinzufügen <property name="visible">True</property>
Widget, so dass es lautet:
<?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>
In Glade die Eigenschaft kann im Rahmen der gemeinsamen Register Eigenschaften des Fensters zu finden.
Andere Tipps
Sie könnten das Herunterladen MonoDevelop für Windows suchen. Gtk # hat sich nicht wirklich Glade in eine lange Zeit verwendet. Im Allgemeinen nutzt Stetic, die einen Designer in MonoDevelop gebaut hat.