2010-08-31 43 views
4

我一直試圖開始使用Mono & GTK#(我來自Qt/C++ GUI編程的背景),並決定從一個非常簡單的測試GUI開始。Mono,C#和Glade入門#:如何讓窗口出現?

我安裝了MS Windows Mono/GTK#安裝程序,然後,當發現開始菜單鏈接到Glade沒有工作(因爲它似乎沒有包含在軟件包中),我使用了「Glade與GTK +「來自Glade網站的Windows二進制安裝程序。

然後我在Glade中創建了一個非常簡單的GUI(在這篇文章的底部),並寫了我的第一個C#代碼來顯示它。但是,它似乎沒有正常工作。

「你好,世界!」正確地打印到控制檯,然後程序掛起而不顯示窗口或打印任何錯誤消息。看起來好像這個窗口已經創建並且事件循環已經開始但是它沒有被顯示出來。我嘗試從new Glade.XML行刪除第一個null,並且不包括glade文件作爲資源,但這沒有什麼區別。

我也試圖與一個替代格萊德GUI XML的the GtkSharpBeginnersGuide on the mono website(和改變wndTestWindowwindow1在C#代碼),它似乎很好地工作意味着有一個與我的格萊德XML的一個問題。但是,我發現很難弄清我的Glade安裝創建的XML有什麼問題。任何人都可以提供建議嗎?

格萊德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#測試代碼:

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

編譯和運行:

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

版本:

Windows系統:XP Service Pack 3的 Glade:3.6.7 MCS版本2.6.7.0 單聲道& GTK#使用來自Mono網站的mono-2.6.7-gtksharp-2.12.10-win32-2.exe安裝。

編譯&使用cygwin和「Mono-2.6.7命令提示符」進行了測試。

回答

6

嘗試增加<property name="visible">True</property>到你的根小部件,以便它讀取:

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

在格萊德該屬性可以爲窗口的常用屬性選項卡下找到。

+0

輝煌,就是這樣:謝謝。我沒有足夠的投票聲譽,但我已經接受了答案。 – NPB 2010-09-13 07:09:31

1

你可能想看看下載MonoDevelop for Windows。 Gtk#很久沒有真正使用過Glade了。通常它使用Stetic,它有一個內置於MonoDevelop中的設計器。

http://monodevelop.com/

+0

謝謝,但它看起來像Stetic是非常難以使用,除非你想使用MonoDevelop的一切(我不這樣做)。我試圖加載它只是創建一個與Stetic的圖形用戶界面,但沒有創建一個完整的項目找不到一個方法。我對使用的IDE非常滿意:我不喜歡爲不同的語言使用不同的IDE。 – NPB 2010-09-13 07:08:44