前回 、私はGladeプログラムについて書くことを約束しました。
Gladeは、GTK +でグラフィカルインターフェイスを視覚的に作成するためのアプリケーションです。 オープンソースであり、無料で配布されています。
コードを介してウィンドウを描画しようとした方法を覚えていますか? このトピックを読んだ後、ウィジェットをパレットから移動するだけで、少なくとも数千のそのようなウィンドウを作成できます。

Gladeを使い始める
Gladeをダウンロードしてインストールします。 GNU / Linuxを使用する場合、このプログラムはリポジトリ内にある必要があります。
Gladeを開き、新しいインターフェイスファイルを作成します([ファイル]-> [作成])。 同時に、最初のウィンドウが作成されます。 その中には何もありませんが、左パネルで使用可能なウィジェットの数を確認してください!

フォームにGtkBoxのような垂直コンテナを配置しましょう。 選択アイコン

フォーム上の灰色のスペースをクリックします。 必要なセルの数を尋ねるダイアログが表示されます。 少し良いはずなので、3の代わりに2を入力します。

ウィンドウは2つの等しい部分に分割されます。 ウィンドウにはウィジェットが1つしか存在できないことに注意してください。 これで、ユーザーには2つのウィジェットが収まるように見えます。
GTKパッケージング方法の紹介を続けるには、両方の部分に何かを入れてください。 ラベルとボタンを配置します。

これらの2つのウィジェットはなんとなく奇妙に見えます-明らかにcr屈です。 何ができるか見てみましょう。
最初に、コンテナ自体の設定を見てみましょう。 それを選択して、右側のプロパティバーを見つけます。

ここで、ウィジェット間の距離、コンテナの方向(垂直または水平)などを指定できます。
何かが理解できない場合は、カーソルをプロパティの名前に移動するだけで、プロンプトが表示されます。
また、変更したパラメーターは太字で表示されることに注意してください。
ラベルを選択して、「パッケージング」タブに移動します。このタブには、GtkBoxコンテナでウィジェットのパッケージ化をカスタマイズできるプロパティが含まれています。

「拡張性」をオンにすると、フォームの外観が若干異なります。ラベルは使用可能なすべてのスペースを占有しようとし、ボタンのサイズは可能な限り小さくなります。
ウィンドウフレームを変更することもできます(前のトピックを参照)-境界線を10ピクセルに設定します。
結果を確認するには、プレビューボタン(

)

信号
次に、ボタンが押されたときにラベルを変更しましょう。
ボタンを強調表示し、プロパティで[信号]タブに移動します。
「clicked」イベントを見つけて「helloworld」ハンドラーの名前を入力し、データとしてラベルを示します。

一般に、それですべてです。 次に、プログラミングに移りましょう。
プログラミング
まだいくつかのコードを書く必要があります。
まず、このテンプレートを使用して、「habrahabr.ui」インターフェイスでファイルを開こうとします。
#include <gtk/gtk.h> static GtkWidget* create_window (void) { GtkWidget *window; GtkBuilder *builder; GError* error = NULL; builder = gtk_builder_new (); if (!gtk_builder_add_from_file (builder, "habrahabr.ui", &error)) { g_critical (" : %s", error->message); g_error_free (error); } gtk_builder_connect_signals (builder, NULL); window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); if (!window) { g_critical (" "); } g_object_unref (builder); return window; } int main (int argc, char *argv[]) { GtkWidget *window; gtk_init (&argc, &argv); window = create_window (); gtk_widget_show (window); gtk_main (); return 0; }
では、helloworldと呼ばれるシグナルハンドラを作成しましょう。
static void helloworld (GtkButton *button, gpointer label) { gtk_label_set_text (label, ", !"); }
それだけです!

