簡體   English   中英

當我使用屬性窗口中的pixbuf選項將圖像添加到gtk窗口時,Monodevelop不斷崩潰

[英]Monodevelop keeps crashing when I add an image into a gtk window using the pixbuf option in the properties window

我正在為學校的家庭作業項目制作一個簡單的應用程序,並嘗試添加圖像,但是每次執行IDE崩潰時,如果我設法進行編譯,當我進入該窗口時,整個程序就會崩潰。 它沒有給我一個錯誤,當我在終端中打開它時,沒有任何輸出。

我嘗試使用包含的圖標,嘗試將其導入到項目目錄中,並且嘗試訪問它作為指向文件的鏈接,但無濟於事。

這是處理圖像文件的構建部分,但是我真的不知道我在做什么,因為這是我制作的第一個gtk應用程序。 我可以根據需要提供其他代碼段。 當圖像加載到程序中時,我無法提供任何代碼示例,因為它會立即崩潰。

// Container child hbox6.Gtk.Box+BoxChild
            this.image1 = new global::Gtk.Image();
            this.image1.Name = "image1";
            this.hbox6.Add(this.image1);
            global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox6[this.image1]));
            w6.Position = 0;
            w6.Expand = false;
            w6.Fill = false;
            // Container child hbox6.Gtk.Box+BoxChild
            this.image2 = new global::Gtk.Image();
            this.image2.Name = "image2";
            this.hbox6.Add(this.image2);
            global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox6[this.image2]));
            w7.Position = 1;
            w7.Expand = false;
            w7.Fill = false;
            this.hbox3.Add(this.hbox6);
            global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.hbox6]));
            w8.Position = 0;
            w8.Expand = false;
            w8.Fill = false;
            // Container child hbox3.Gtk.Box+BoxChild
            this.hbox4 = new global::Gtk.HBox();
            this.hbox4.Name = "hbox4";
            this.hbox4.Spacing = 6;
            // Container child hbox4.Gtk.Box+BoxChild
            this.image3 = new global::Gtk.Image();
            this.image3.Name = "image3";
            this.hbox4.Add(this.image3);
            global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox4[this.image3]));
            w9.Position = 0;
            w9.Expand = false;
            w9.Fill = false;
            // Container child hbox4.Gtk.Box+BoxChild
            this.image4 = new global::Gtk.Image();
            this.image4.Name = "image4";
            this.hbox4.Add(this.image4);
            global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox4[this.image4]));
            w10.Position = 1;
            w10.Expand = false;
            w10.Fill = false;

沒有錯誤消息,因為整個事情要么完全崩潰要么停止響應,所以我無法提供類似的信息。 任何幫助,將不勝感激。 感謝您的時間。

首先,您不需要使用設計器來完成如此簡單的任務。 此外,設計人員始終將您與給定的IDE(在這種情況下為MonoDevelop)聯系在一起。 圖形工具箱比以前直觀得多,而且很多時候了解如何使用它們是微不足道的。

這是一個僅在窗口中顯示圖像的項目的完整代碼。

class MainWindow: Gtk.Window {
    public MainWindow()
        :base(Gtk.WindowType.Toplevel)
    {
        this.Build();


        this.DeleteEvent += (o, args) => Gtk.Application.Quit();
    }

    void Build()
    {
        var imgContainer = this.BuildEmbeddedImage();

        this.Add( imgContainer );
    }

    Gtk.Image BuildExternalImage()
    {
        return new Gtk.Image( "res/prowl.jpg" );
    }

    Gtk.Image BuildEmbeddedImage()
    {
        var pixbufImage = new Gdk.Pixbuf(
            System.Reflection.Assembly.GetEntryAssembly(),
            "CSShowImage.res.prowl.jpg");

        return new Gtk.Image( pixbufImage );
    }
}

class Ppal
{
    [System.STAThread]
    static void Main()
    {
        Gtk.Application.Init();
        new MainWindow().ShowAll();
        Gtk.Application.Run();
    }
}

為了使該代碼起作用,您必須執行以下操作:

  1. 下載圖片。 我下載了有關自動機器人PROWL的圖像,並將其稱為prowl.jpg,但是您當然可以選擇任何內容。

  2. 通過MonoDevelop在項目中創建目錄(右鍵單擊該項目,然后選擇“新文件夾”)。

  3. 將圖像復制到該文件夾​​:右鍵單擊新創建的文件夾(我稱該文件夾為“ res”),然后選擇“添加文件”,在MonoDevelop詢問要執行的操作時,將圖像復制到該文件夾​​。

  4. 右鍵單擊圖像,然后選擇“快速屬性>>復制到輸出目錄”。 這將使BuildExternalImage()方法起作用。 如果您不打算使用外部圖像,則可以跳過此步驟。 考慮到這種方式,您必須將映像與可執行文件一起分發(在名為“ res”的目錄中)。

  5. 右鍵單擊該圖像,然后選擇“構建操作>> EmbbeddedResource”。 這將使方法BuildEmbeddedImage()起作用。 該映像將位於您的可執行文件內,無需擔心其他任何事情。 唯一需要注意的是,在BuildEmbeddedImage ,您必須使用項目名稱,帶有圖像的目錄名稱以及圖片。 例如,如果您的項目名為“ HomeWork”,您將文件夾創建為“ res”,並且圖像是“ myfamily.jpg”,那么結果字符串將是“ HomeWork.res.myfamily.jpg”

如果您堅持使用設計器,則:

  1. 在Gtk#2.0部分的MonoDevelop中創建一個新項目

  2. 轉到MainWindow.cs並進入設計器。

  3. 從要設計的窗口內的工具箱中拖放一個Image小部件。 MonoDevelop會抱怨您使用小部件而不是容器(例如VBox),然后在其中使用小部件。 繼續進行任何選擇。

  4. 選擇圖像小部件,然后轉到屬性,展開“圖像屬性”。 在pixbuf中,單擊“ ...”按鈕。 轉到資源文件夾。 點擊“添加”,然后選擇您的圖片。 MonoDevelop將為您完成繁重的工作,並且圖像將立即出現在設計器中。

  5. 點擊“運行”。

老實說,MonoDevelop在第一次執行時就崩潰了,但是在再次打開項目時看起來很穩定。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM