LoginSignup
2
0

Crystalでウィンドウを表示する (gtk4.cr)

Last updated at Posted at 2023-12-09

はじめに

さあ、アドベントカレンダーなのですが、今日もネタがありません。
なので、ものすごく薄いネタでいこうと思います。
gtk4.cr を使ってウィンドウを表示するのをやります。

Screenshot from 2023-12-09 23-03-28.pngScreenshot from 2023-12-09 23-03-45.pngScreenshot from 2023-12-09 23-03-58.png

GTK4

まずはプロジェクトを作ります。

crystal init app piyo
cd piyo

設定ファイル shards.yml を開いて、

vi shards.yml

依存 gtk4 を追加します。

+ dependencies:
+   gtk4:
+    github: hugopl/gtk4.cr

終わったら依存 gtk4 をインストールしましょう。

shards install

それではコードを編集していきます。

vi src/piyo.cr

module Piyo とか VERSION とか書いてありますが、今回は全部消して次のように書きました。

require "gtk4"

app = Gtk::Application.new("hello.example.com", Gio::ApplicationFlags::None)

app.activate_signal.connect do
  window = Gtk::ApplicationWindow.new(app)
  window.title = "🔮"
  window.set_default_size(200, 200)

  button = Gtk::Button.new_with_label("クリスタルの世界へ\nようこそ!!")
  button.clicked_signal.connect do
    button.label = "じゃんけんしましょう!\n\n" \
                   "#{["グー ✊", "チョキ ✌", "パー 🖐"].sample}"
  end
  window.child = button
  window.present
end

exit(app.run)

ここで、さっそく

shards build

とすると、必ず次のようなエラーメッセージが出るので、

Error target piyo failed to compile:
Showing last frame. Use --error-trace for full trace.

In lib/gtk4/src/gtk4.cr:2:11

 2 | GICrystal.require("Gtk", "4.0")
               ^------
Error: Bindings for Gtk-4.0 not yet generated, run ./bin/gi-crystal first.

言われるがままに ./bin/gi-crystal を実行しましょう。

bin/gi-crystal

これで shards build が通るようになります。

shards build

これで実行できます。

bin/piyo

テキトウに作っているので、あまりゲームになっている感じがしませんが、とりあえずクリックするたびにランダムで、グーチョキパーが表示されます。はい、Windowが表示されました。

Screenshot from 2023-12-09 23-03-28.pngScreenshot from 2023-12-09 23-03-45.pngScreenshot from 2023-12-09 23-03-58.png

GUIが表示されると、私は子供の頃憧れていた「ソフトウェア」を作れるようになったんだなぁという気持ちになります(個人差があります)。

こんな感じでとても簡単にできるので試してみてください。MacOSを使っている場合でも、homebrewなどでgtk4をインストールすればできるはずです。

この記事は以上です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0