このパートでは、別のウィンドウを作成し、GTKを使用してデザインする方法を説明します。 また、質問の追加や50つのボタン(XNUMX%、フリーズ、パス)の使用などの機能もいくつか表示されます。
ToolBarとToolButton
ToolBarを作成します。
ToolButtonを作成します。この場合、アイコンを配置します(デフォルトでは多くのアイコンを見つけることができます) ここで)with«from_stock(Gtk.Stock.IconName):
このアプリケーションでは、上部にXNUMXつのボタンがあるバーがあり、最初のボタンを使用して新しい質問を作成し、XNUMX番目のボタンを使用して(ファイルを介して)質問をインポートしていることがわかります。
質問の作成:
以前に(ツールバーで)作成したボタンをクリックすると、データベースに質問を追加できる新しいgtkウィンドウが開きます。
新しいウィンドウを作成するには、Questionsと呼ばれる新しいクラスを作成し、Appクラスが新しいウィンドウを作成する方法を作成します(this.window = new Gtk.Window();)
いくつかのコンポーネントを使用して、グラフィカルインターフェイスを順番に作成します。
-ラベル(質問)
-エントリー(質問を書く場所)
-ラベル(応答)
-エントリ(回答)とスイッチ(正しいものかどうかを選択するため)を含む4つの水平ボックス
-ボタン(完了する)
私たちはそれがどのように見えるかを見ることができます:
質問を保存するには、エントリのテキストを取得する必要があります。エントリは、文字列を返すget_text()で取得されます。
スイッチがアクティブかどうかを知るには、その方法を使用できます get_active ()オンの場合はtrueを返し、オフの場合はflasを返します。
50%、フリーズボタンとパスボタン:
-50%:
50%の場合、正しいボタンを確認し、正しくない2つを削除するだけです。この場合、set_sensitive(false)でキャンセルします。
結果:
-氷結:
バーを再び0に設定します。
this.time_bar.set_fraction(0);
-パス:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
次のパート(4):
次回の記事では、質問が常に同じ位置に表示されるとは限らない、アプリにアイコンを配置するなど、アプリケーションの側面を改善する方法を説明します...
答えはとても気に入っています…笑
Vala に関するこれらの記事は非常に優れています。他の記事も楽しみにしています。よろしくお願いします。
Vala へのエントリーを保留しています。たくさんの配信があることを願っています。 こんにちは!
良い記事です、共有してくれてありがとう。
こんにちは、
このアプリを作成するために以前のエントリに従いました。新しいウィンドウのエントリにアクセスしようとすると問題が発生します。createQuestions クラス (ウィンドウを作成するクラス) の saveC メソッドでこの方法でアクセスします。 。
public void saveC() {
文字列 str = askE.get_text();
stdout.printf("%s を扱う\n", str);
}
しかし、出力では次のようになります。
(bu:6196): Gtk-CRITICAL **: gtk_entry_get_text: アサーション `GTK_IS_ENTRY (entry)' が失敗しました
処理済み (null)
いくつかの例を見てきましたが、エントリにアクセスするメソッドの定義では次のようなことが行われます。
void on_activate(Gtk.Entry エントリー) {
名前 = エントリ.get_text();
print("\nHello" + 名前 + "!\n\n");
}
しかし、エントリは 5 つしかなく、この例では XNUMX つあります。そのため、ここですでに迷ってしまったのですが、もっとわかりやすく教えていただけませんか。
エントリを作成するときは、エントリに同じ名前を付けません。エントリのテキストを取得するには、次のようにします。
r1 = エントリ1.get_text();
r2 = エントリ2.get_text();
r3 = エントリ3.get_text();
r4 = エントリ4.get_text();
もしよかったら、ペーストビンを置いてください、それでは見てみましょう
lolbimbo はい、実際には異なる名前を付けていますが、エントリに入力したテキストを返すものはなく、前述のエラーが送信されるため、テスト用に XNUMX つだけを使用しています。
しかし、出力では次のようになります。
(bu:6196): Gtk-CRITICAL **: gtk_entry_get_text: アサーション `GTK_IS_ENTRY (entry)' が失敗しました
処理済み (null)
調査を続けています...
乾杯。!!
ここにソースが用意されています、こんにちは。
http://pastebin.com/pZG8GbrY
こんにちは、ハイラム、ほら、それを解決するためにどのようにしなければならないかを教えます。これが最初に起こるのは、新しいウィンドウ (メインウィンドウではありません) を作成し、エントリを呼び出すときに、(ごめんなさい)言葉として)なぜそれがエントリではなくウィジェットであるかのように返されないのかわかりませんが、それを修正するには、作成したすべての静的コンポーネントを動的コンポーネントに変更するだけです。変数:
var askE = new Gtk.Entry();
その後、関数が機能し、エントリ内のテキストを受け取ります。
save.clicked.connect(() => {
//文字列 str = this.questionE.get_text();
stdout.printf("%s を扱う\n", askE.get_text());
});
最後に、エントリを追加した行を変更して表示することを忘れないでください。
askE.show();
すでに動作していること、つまりアプリケーションを続行するにはすべての要素 (少なくともエントリ) を変更する必要があるかどうかを確認できるように、変更を加えた完全なコードを残しておきます。
http://paste.desdelinux.net/5048
よろしく
Chale、このあたりでまた悩まされています。問題が続いています。あなたが示したコードは正常に動作します。イベントで何かが起こるだけです。
save.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.guardar.clicked.connect(this.guardarC);
^^^^^^^^^^^^^^
bu01.vala:251.58-251.66:警告:Gtk.Stockは3.10以降非推奨になっています
bu01.vala:260.59-260.67:警告:Gtk.Stockは3.10以降非推奨になっています
コンパイルに失敗しました:1つのエラー、2つの警告
クリックイベントが発生したときにパラメータを渡す方法が原因だと思います。
this.guardar.clicked.connect(this.guardarC);
フィードバックをよろしくお願いします。 ここに、エラーをスローするコードを残します。 http://pastebin.com/pLzExhrb
試したことはありませんが、関数から引数を削除するとそれが破棄されると思います。
public void saveC (Gtk.Entry askE) {
文字列 str = askE.get_text();
stdout.printf("%s を扱う\n", str);
}
a:
public void saveC() {
文字列 str = askE.get_text();
stdout.printf("%s を扱う\n", str);
}
lolbimbo、引数を削除しようとしましたが、まだ機能しません。
私はまだ問題を理解しようとしています。Vala は初めてで、ドキュメントがあまり見つかりません。解決策がすぐに見つかることを願っています。または、第 XNUMX 部 xD がリリースされるまでお待ちください。
努力し続けます...
ご挨拶。