Lintfy屋

日記とか

GTK+3を触ろう! [ はじめの一歩 ]

はじめの一歩を踏みましょう。

WARING : ここでは環境としてLinux Mint を利用しています。

環境構築

GTK+ 3のインストール方法はいろいろですが、めんどくさい環境構築は嫌ですから、ターミナルより

$ sudo apt-get install libgtk-3-dev

で導入しましょう。

( 一応言っておきますが、最初の"$"はここではターミナルでの動作を表す記号としていますから、コピペする際はそこだけ外しておいてください。 )

コードを試す

事前にお手元のコンパイラが正常に動作するか確認しておいてください。

ではまず最初に、無能な赤ちゃんウインドウを作成しましょう。

#include <gtk/gtk.h> // includeしておく

int main(int argc, char** argv){

    gtk_init(&argc,&argv); // 初期化

    GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // windowの定義

    gtk_widget_show(window); // windowの表示

    gtk_main(); // メインループ

    return 0;
}

とにかくコピペしたら、次はビルド。 ( ここではmain.c とします )

普通にビルドすると、「<gtk/gtk.h>なんてもんはうちにはねえよ!!」と弾かれます。ですから下のようにしてください。

$ gcc -o main main.c $(pkg-config --cflags --libs gtk+-3.0)

ここで出てくる $(pkg-config --cflags --libs gtk+-3.0) は、必要なコマンドの入力を一つにまとめるおまじないだと考えてください。

必須ですから、忘れないようにしましょう。

またここでは、-oオプションもつけておいてください。


さて、このコマンドから生成された実行ファイルを実行してみましょう。

画面の左上端を見てください。

f:id:Tlllune:20190301190437p:plain

エラーなく実行できたら成功!

あらかわいい。元気な男の子です。

しかしまだ機能はほとんどありません。注意してほしいのは、ここで生成されたwindowを消してもプログラム自体は終了されないということです。


というわけで、ここからGTKを触るのに必要な最低限の機能を追加していきましょう。

#include <gtk/gtk.h>

int main(int argc, char** argv){

    gtk_init(&argc,&argv);
    GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    //---
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); 
    // windowの場所、ここでは画面中央

    gtk_widget_set_size_request(window,300,200); 
    // windowの最小サイズ(これ以上は小さくならない)

    gtk_window_set_default_size(GTK_WINDOW(window),500,400); 
    // 標準のwindowのサイズ

    g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL); 
    // signal "destroy" の追加、ここでは標準装備のgtk_main_quit関数を使用
    //---
    gtk_widget_show(window);
    gtk_main();

    return 0;
}

f:id:Tlllune:20190301192216p:plain

立派な無能ウインドウが生成されました!

それでは解説していきます。


gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER)

https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-set-position

ウインドウを配置する場所を設定します。


さて、この関数の第一引数に関してですが、すこし重要なことがあります。
この記事では、windowを GtkWidget型 で宣言しています。
しかしこの関数は、第一引数を「GtkWindow型」でなければなりません。

GTK_WINDOW() は、このGtkWidget型のwidgetGtkWindow型として扱うために使います。
今後他のドキュメントを読むときにかなり大事になってくる要素なので、頭に入れておいてください・。


gtk_widget_set_size_request(window,幅,高さ)

https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-set-size-request

ウインドウの最小サイズを設定します。


gtk_window_set_default_size(GTK_WINDOW(window),幅,高さ)

https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-set-default-size

ウインドウの標準サイズを設定します。


g_signal_connect関数は非常に重要な関数なので、今度の機会に詳しく説明しようと考えています。 とにかく今は「メインループの終了に利用する」ということだけ据えておいてください。

まとめ

今回は、ウインドウの作成と最小限の機能の付与をしました。

次はLabelの使い方を説明します。CSSにも少し触れるかも。

GTK+3を触ろう! ~GTKを勝手に紹介してみる~

概要

GTK、なかでもGTK+3の日本語ドキュメントは少なすぎます。

GTK+3という素晴らしいライブラリを前に、なぜ人はドキュメントを書かないのか。(人気がないからだろうに)

というわけで、僕がなんとなく書くことにしました。

はっきり言ってにわかです。空き樽系です。書くコードも最適ではないかもしれません。

でも、ドキュメントを欲すほんの少しの人間の役にでも立てればいいかなと思っています。文句があるならお前が書け!

注意事項

この記事では、OSはLinux mint (Ubuntu系) としています。

Windowsは環境構築に挫折してしまった経緯がありますから、この記事は参考にならないかもしれません。というかWindows上でのGTKプログラミング自体推奨できません。
Macは(持って)ないです。

また、ここではコンパイラC言語で、GCC(7.3.0)のものとしています。
C++でも動くと思います、多分。ただし動作確認はしないので自己責任でお願いします。

一覧

lintfy.hateblo.jp

参考ドキュメント等

GNOME Developer Center : GNOME開発者の公式レファレンス。英語

素人の独学GTK+3.0 目次 : GTK3.0のチュートリアル。日本語

随時更新