創建應用程序(Vala + GTK 3)[第三部分]

在這一部分中,我們將了解如何創建另一個窗口並使用 GTK 進行設計。 我們還將看到一些功能,例如添加問題和使用三個按鈕(50%、凍結和通過)。

工具欄和工具按鈕

創建一個工具欄:

app2

創建一個 ToolButton,在本例中我們將在其上放置一個圖標(您可以找到許多默認圖標 這裡)與“from_stock(Gtk.Stock.IconName):

從2013-12-07 23:26:52捕獲

我們可以看到,在我們的應用程序中,頂部有一個帶有兩個按鈕的欄,我們將使用第一個按鈕創建新問題,第二個按鈕用於導入問題(通過文件):

從2013-11-08 00:30:32捕獲

創建問題:
單擊我們之前創建的按鈕(在工具欄中)將打開一個新的 gtk 窗口,該窗口允許我們向數據庫添加問題:

app1

為了創建一個新窗口,我們將創建一個新類,我們將其稱為 Questions,並且像我們的 App 類一樣,我們將創建一個新窗口 (this.window = new Gtk.Window();)

我們將使用一些組件按順序創建圖形界面;

-標籤(問題)

– 條目(我們將在其中寫問題)

- 標籤(回复)

– 4 個水平框,其中包含一個條目(答案)和一個開關(選擇是否正確)

- 按鈕(完成)

我們可以看到它的樣子:

從2013-12-08 01:07:08捕獲

為了保存問題,我們必須獲取條目的文本,它們是通過返回字符串的 get_text() 獲得的。

app5

要知道 Switch 是否處於活動狀態,我們可以使用它的方法 獲取活動 () 如果打開則返回 true,如果關閉則返回 flase。

 50%、凍結和跳過按鈕:

 -50%:

對於 50%,我們只需查看哪個按鈕是正確的,然後刪除 2 個不正確的按鈕,在這種情況下,我們使用 set_sensitive(false) 取消它們。

app4

結果:

app6

-凍結:

我們再次將欄設置為 0。

this.bar_time.set_fraction(0);

-經過:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 下一部分(4):

在下一部分中,我們將看到如何改進應用程序的各個方面,例如問題並不總是出現在同一位置,在應用程序上放置一個圖標......


12條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   F3NIX 他說:

    我喜歡這些答案……哈哈​​..問候

  2.   潘喬莫拉 他說:

    Vala 上的這些文章非常好。我期待其他文章。問候

  3.   CR0T0 他說:

    我正在等待你進入瓦拉,我希望有很多交貨。 問候!

  4.   普特魯 他說:

    好文章,謝謝分享。

  5.   西貢 他說:

    HOLA,

    我已經按照您之前的條目創建了這個應用程序,現在問題來了,我嘗試訪問新窗口的條目,我在 createQuestions 類(創建窗口的類)的 saveC 方法中這樣做。

    公共無效saveC(){
    字符串str=askE.get_text();
    stdout.printf("論文 %s\n", str);
    }

    但在輸出中我得到這個:
    (bu:6196):Gtk-CRITICAL **:gtk_entry_get_text:斷言“GTK_IS_ENTRY(條目)”失敗

    已處理(空)

    我看過一些示例,在訪問條目的方法的定義中,它們執行如下操作:

    void on_activate(Gtk.Entry 條目) {
    名稱=entry.get_text();
    print("\n你好" + 姓名 + "!\n\n");
    }

    但他們只有一個條目,在這個例子中有 5 個,所以我在這裡迷路了,你能更好地指導我嗎?

    1.    洛賓博 他說:

      好吧,當您創建條目時,您不會給它們提供相同的名稱,為了獲取它們所擁有的文本,您可以這樣做:

      r1 = Entry1.get_text();
      r2 = Entry2.get_text();
      r3 = Entry3.get_text();
      r4 = Entry4.get_text();

      如果你願意的話,放一個pastebin,我來看看

      1.    西貢 他說:

        lolbimbo 是的,事實上我有不同的名稱,但我只使用一個進行測試,因為它們都沒有返回我在條目中輸入的文本,它向我發送了上述錯誤:

        但在輸出中我得到這個:
        (bu:6196):Gtk-CRITICAL **:gtk_entry_get_text:斷言“GTK_IS_ENTRY(條目)”失敗

        已處理(空)

        我繼續調查...

        乾杯。!!

      2.    西貢 他說:

        這裡準備好了來源,問候。
        http://pastebin.com/pZG8GbrY

    2.    洛賓博 他說:

      你好 Hiram,看,我會告訴你如何解決它,發生這種情況的第一件事是我們正在創建一個新窗口(它不是主窗口),並且在調用條目時,(抱歉對於這些詞)我不知道為什麼它他媽的不返回,就好像它是一個條目,而是一個小部件,但是嘿,要修復它,您只需使用以下命令將您創建的所有靜態組件更改為動態組件變量:

      var AskE = new Gtk.Entry();

      然後該功能將起作用,您將收到條目內的文本。

      保存.clicked.connect(() => {
      //字符串str = this.questionE.get_text();
      stdout.printf("論文 %s\n", AskE.get_text());
      });

      最後,不要忘記更改添加條目以顯示它的行:

      askE.show();

      我將經過修改的完整代碼留給您,以便您可以驗證它是否已經有效,即您是否必須更改所有元素(至少是條目)才能繼續應用程序。

      http://paste.desdelinux.net/5048

      問候

      1.    西貢 他說:

        Chale,在這裡再次困擾我,我一直遇到問題,你向我展示的代碼工作正常,只有在事件中發生了一些事情:

        保存.clicked.connect(() => {
        //字符串str = this.questionE.get_text();
        stdout.printf("論文 %s\n", AskE.get_text());
        });

        它位於 Questions 類內部,工作正常,但是當我想從 saveC 輸入它時,它無法編譯,它給了我這個錯誤:

        bu01.vala:50.38-50.50:錯誤:參數 1:無法從“Questions.saveC”轉換為“Gtk.Button.clicked”
        this.save.clicked.connect(this.saveC);
        ^^^^^^^^^^^^^^
        bu01.vala:251.58-251.66: 警告:Gtk.Stock 自 3.10 起已被棄用
        bu01.vala:260.59-260.67: 警告:Gtk.Stock 自 3.10 起已被棄用
        編譯失敗:1 個錯誤,2 個警告

        我想這是因為我在點擊事件發生時傳遞參數的方式:
        this.save.clicked.connect(this.saveC);

        預先非常感謝您的反饋; 這是引發錯誤的代碼: http://pastebin.com/pLzExhrb

      2.    洛賓博 他說:

        我還沒有測試過它,但我認為從函數中刪除參數會丟棄它。

        公共無效saveC(Gtk.Entry AskE){
        字符串str=askE.get_text();
        stdout.printf("論文 %s\n", str);
        }

        a:
        公共無效saveC(){
        字符串str=askE.get_text();
        stdout.printf("論文 %s\n", str);
        }

      3.    西貢 他說:

        lolbimbo,我已經嘗試刪除爭論,但它仍然不起作用,

        我仍在嘗試理解這個問題,我是 Vala 的新手,我找不到太多文檔,我希望盡快找到解決方案或等到你發布第四部分 xD。

        我繼續努力...

        問候。