linux,  フリーソフト,  プログラム,  日記,  開発

GTK3 c言語 で作成してみた

GTK3 c言語 で作成してみた
とあるとこのページをサンプルとして動かしてみた
ファイル名を sample1.c
出力ファイル名を sample1 の実行ファイルとした

#include <gtk/gtk.h>

void clicked_button(GtkWidget* widget, gpointer data)
{
gtk_main_quit(); // プログラムが終了する
}
//関数先読み込みが基本なので上に関数置きました。みんなやってるし。

char buf[20]=”ひらの”;

void increase(GtkWidget *widget, gpointer label)
{

gtk_label_set_text(label, buf);
}

int main (int argc, char* argv[])
{
GtkWidget* window;

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

// Windowの作成
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

// Windowsの大きさを指定
gtk_widget_set_size_request(window, 640, 480);

// Windowタイトルの設定
gtk_window_set_title(GTK_WINDOW(window), “タイトル”);

//1 ラベルの作成
GtkWidget* label;
label = gtk_label_new(“Hello World! こんにちは世界!”);
//gtk_container_add(GTK_CONTAINER(window), label);//消さないとラベルだけの画面になるので消す。下でboxとして設定

//2 イメージの作成
GtkWidget* image;
image = gtk_image_new_from_file(“/home/hirano/画像/Untitled 1.bmp”);

//3 ボタンを作成し、Window上に配置
GtkWidget* button;
button = gtk_button_new_with_label(“Don’t Push Me!”);

//4 パッキングボックスを作成
GtkWidget* box;
// 第一引数で縦積みか横積みかを決めれる。第二引数はそれぞれのWidgetの隙間のピクセル数
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); // 縦に積まれていく。横に並べたいならGTK_ORIENTATION_HORIZONTAL

//4の ラベルとイメージとボタンをボックスに追加
gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), image, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);

// ボックスをWindowに追加(ボタンやラベルで先に gtk_container_addすると先に場所取られるので消してboxだけにする
gtk_container_add(GTK_CONTAINER(window), box);

// ボタンを押したときの関数
g_signal_connect(button, “clicked”, G_CALLBACK(increase), label);
//ウィンドゥ右上のぺけボタンで終了するための関数
g_signal_connect(G_OBJECT(window), “destroy”, G_CALLBACK (gtk_main_quit), NULL);

// Windowの表示
gtk_widget_show_all(window);

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

return 0;
}

まるっとコピーしてコンパイル

$ gcc ‘/home/hirano/sample1.c’ `pkg-config –cflags –libs gtk+-3.0` -o sample1

Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc’
to the PKG_CONFIG_PATH environment variable
Package ‘gtk+-3.0’, required by ‘virtual:world’, not found
/home/hirano/sample1.c:1:10: fatal error: gtk/gtk.h: そのようなファイルやディレクトリはありません
1 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.

エラーが出たので下記をインストール
アップデートがかかったので足らなかったらしい

$ sudo apt-get install gtk+-3.0

$ sudo apt-get install libgtk2.0-dev または libgtk3.0-dev

実行

$ ./sample1

実行できた

CかC++でgtkがやってみたいとずっと本を読んでいた
だいたい構造がわかってきたのでやってみたらできた
あとは付け足すだけでgladeも試してみようと思う
UIツールも今度使ってみて関数を追加すれば動くと思うが・・・
UIツールがうまく行かなくてもperl/tkと同じでcuiで作れるのでかんたんなものならなんとかなりそうだ
C++のほうがコードはかんたんになりそうなので気が向いたら勉強してみようと思う

とりあえずGTKのスケルトンに何を付け足すのかコンパイルはどうするのかわかれば、自分用ならなんとかなる
C言語のサンプルは結構転がってるので、すぐできるだろう
入力、表示、コマンド実行
これをGUIで簡単にやりたいときに欲しいので!
ようやく理解できたというか自分のものになったというか
一つ幅が広がった。

入門GTK+菅谷 保之 著

の本も買い。PDFもダウンロードして参考にさせてもらいました

Last Updated on 2023年5月8日10:31 am by cgishop