4

私はMono&GTK#(Qt / C ++ GUIプログラミングのバックグラウンドから来ました)を使い始めようとしていて、非常に単純なテストGUIから始めることにしました。

MS Windows Mono / GTK#インストーラーをインストールし、Gladeへのスタートメニューリンクが機能しないことを発見すると(パッケージに含まれていないように見えたため)、「GladewithGTK+」Windowsを使用しました。 GladeWebサイトのバイナリインストーラー。

次に、Glade(この投稿の下部)で非常に単純なGUIを作成し、それを表示するためのC#コードの最初のビットを記述しました。ただし、正しく機能していないようです。

「Hello、World!」がコンソールに正しく出力された後、ウィンドウが表示されたりエラーメッセージが出力されたりせずにプログラムがハングします。ウィンドウが作成され、イベントループが開始されたように見えますが、ウィンドウは表示されていません。最初のファイルを行nullから削除しnew Glade.XML、gladeファイルをリソースとして含めないようにしましたが、違いはありませんでした。

また、Glade GUI xmlをモノラルWebサイトのGtkSharpBeginnersGuideにあるものに置き換えてみました(そしてC#コードでに変更wndTestWindowしました)。GladeXMLに問題があることを完全に示唆しているようです。window1ただし、Gladeのインストールによって作成されたXMLの何が問題になっているのかを理解するのは難しいと感じています。誰かが何か提案をすることができますか?

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#テストコード:

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.7MCSバージョン2.6.7.0MonoおよびGTK#mono-2.6.7-gtksharp-2.12.10-win32-2.exeは、MonoWebサイトから使用してインストールされます。

cygwinと「Mono-2.6.7コマンドプロンプト」の両方を使用してコンパイルおよびテストされています。

4

2 に答える 2

8

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

Glade では、プロパティはウィンドウの [共通プロパティ] タブにあります。

于 2010-09-12T13:06:24.763 に答える
1

Windows用のMonoDevelopのダウンロードを検討することをお勧めします。Gtk#は長い間Gladeを実際に使用していません。通常、MonoDevelopにデザイナーが組み込まれているSteticを使用します。

http://monodevelop.com/

于 2010-08-31T15:19:22.913 に答える