Domanda

Ho cercato di iniziare con Mono e GTK # (io vengo da un background di programmazione Qt / C ++ GUI) e ha deciso di iniziare con una semplice interfaccia grafica di prova.

Ho installato il programma di installazione # MS Windows Mono / GTK e poi, dopo aver trovato che il link menu Start per Glade non ha funzionato (in quanto non sembra essere incluso nel pacchetto), ho usato il "Radura con installer binario dal sito Glade GTK +" di Windows.

Poi ho creato una molto semplice interfaccia grafica a Glade (in fondo a questo post) e ha scritto il mio primo pezzo di codice C # per visualizzarlo. Tuttavia, non sembra funzionare correttamente.

Il "Ciao, mondo!" viene stampato alla console correttamente e poi il programma si blocca senza finestra che appare o eventuali messaggi di errore in fase di stampa. Sembra come se la finestra è stata creata e il ciclo degli eventi è iniziata ma che non viene reso visibile. Ho provato a rimuovere il primo null dalla linea new Glade.XML e non tra cui il file glade come una risorsa, ma che ha fatto alcuna differenza.

Inoltre ho provato a sostituire il codice XML Glade GUI con quella sulla la GtkSharpBeginnersGuide sul sito mono (e cambiando wndTestWindow al window1 nel codice C #) e sembra funzionare perfettamente il che implica che ci sia un problema con il mio XML Glade. Tuttavia, mi sto trovando difficoltà a capire cosa c'è di sbagliato con il codice XML creato da mia installazione Glade. Chiunque può offrire qualche suggerimento?

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 # Codice di prova:

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();
    }
}

Compilato e correre con:

mcs -pkg:glade-sharp-2.0 -resource:test_mono.glade test_mono.cs
mono .\test_mono.exe

Versioni:

di Windows: XP Service Pack 3 Glade: 3.6.7 MCS versione 2.6.7.0 Mono e GTK # installato utilizzando mono-2.6.7-gtksharp-2.12.10-win32-2.exe dal sito web Mono.

Compilato e testato sia con Cygwin e la "Mono-2.6.7 Prompt dei comandi".

È stato utile?

Soluzione

Prova ad aggiungere <property name="visible">True</property> alla radice widget di modo che legge:

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

Nel Glade la proprietà può essere trovato sotto la scheda Proprietà comune per la finestra.

Altri suggerimenti

Si potrebbe voler guardare il download di MonoDevelop per Windows. Gtk # non ha davvero utilizzato Glade in un tempo lungo. Generalmente si usa Stetic, che ha un design integrato in MonoDevelop.

http://monodevelop.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top