Ruby Gtk で遊ぶノート

投稿者: | 2018年4月21日

(この記事はメモ書きの状態です)(そのうちまとめるかも知れませんが、当分はゴチャゴチャです)

 趣味の日曜プログラマにとって、Ruby/Tk は必要十分な選択肢であった。特にWindowsではTk::Tileを用いることで十分に綺麗なUIを作ることができる。ところが、Ruby/TkはRuby本体から削除されてしまった。LinuxやMacではTkのツールはやや汚い。仕方ないのでRuby/GTKを少しずつ勉強してみることにする。

Github 公式サンプル
https://github.com/ruby-gnome2/ruby-gnome2/tree/master/gtk3/sample/misc

Ruby/GTK でよかったこと

・Webkitが使えるのでウェブページが表示できる
・gem install でパスワードを求められ、ライブラリがインストールされるという新鮮な体験がある
・PDF もすぐ表示されて嬉しい
・Glade が便利

Ruby/Tk の方がよいところ

・潜在的普及率が高い(PythonでもTkinterが結局一番使われているという)
・Windowsでの動作に一定の安心感があった。
・手軽感、充実した資料(Linuxへの導入のしやすさは×、WindowsでもTclの拡張ライブラリの導入は面倒)
・Rubyっぽい書き味

GTKとは何か

わからないものを、わからないなりに理解しようとすることは大事だと思われる。
Wikipediaによると、元々はGTKは、GIMPの実装のために開発されたツールキット。


https://ja.wikipedia.org/wiki/GTK%2B#/media/File:Free_and_open-source-software_display_servers_and_UI_toolkits.svg

なにやってんのか全くわからん部品がたくさん。とりあえずいい加減に理解。

glibc: Gnu標準のCライブラリ
GLib: 異なるOS間、CPU間の移植性を確保するライブラリだと。
GObject: Cでオブジェクト指向するためのやつっぽい。GTK+ 2.0 リリースの際に分離された。Wikipediaによるとサブクラスを作成するだけで数百行もコードが必要になるという。
D-Bus: プロセス間通信だって。
avahi:ネットワークに接続したとき、即座にプリンタを検出するやつらしい
X-Server: ssh -Xでアクセスするやつ。
Wayland: X-Serverじゃなくて、直接画面を描写して早いやつっぽい。2008年と最近。

GTKが保守本流ってことは何となくわかる。FirefoxとかThunderbirdとかもっさりしているけど、とりあえずちゃんと動く。

GTKとruby/GTK

GTKのレポジトリとか
https://gitlab.gnome.org/GNOME/gtk

ruby-gnome2
https://github.com/ruby-gnome2/ruby-gnome2

インストール

コントリビュータはktou氏がほとんど。
公式ドキュメントは更新が止まっていて情報も古い。そもそもLinuxのGUIを常用している人が少ないのかも知れない。

atk: アクセッシビリティ
pango: テキストのレンダリング、汎語?
GdkPixbuf: ピクセル単位で画像扱うやつ
GObjectIntrospection: introspection内省、内観、自己反省
https://qiita.com/groonga/items/71b145b37d77bd160bf2
C言語で書かれたライブラリーを各種スクリプト言語から言語バインディングを書かずに使える機能を提供するライブラリーです。とのこと。

Cairo: Xに依存しないライブラリ。Geckoとかに使われてるらしい。PDFやSVGにも出力。
Gstreamerってなんやろ。よく見るけど。
Clutter is an OpenGL-based ‘interactive canvas’ library

https://github.com/cedlemo/ruby-gtk3-tutorial のチュートリアルやってみる

ウィンドウ出す

delete-event つけないとウィンドウ消してもプロセス残る。

ボタンつける

ボタンに機能をつける

空のウィンドウをだすアプリ

ふう、もう疲れてきた。やっぱりRuby/Tkよりも記述量多い。

ボタン押すとウィンドウ閉じるやつ

配置の方法

配置の仕方はRuby/Tkでもいろいろあって、完全には理解していない。Gtkはもっと大変そう。
Gtk::Box
Gtk::Grid
Gtk::Fixed
あたりが基本っぽい。

グリッドによる配置

UIをxmlファイルに分けて記述

Gladeの使い方を覚える話になってくると、何となく頭の違う部分使ってる気がする。
このままGTKの機能を見ていくと、多分面白くなくなっちゃうのでウィジェットを色々動かしてみる。

カレンダーの表示

ダイアログを出す

ファイル選択ダイアログ

GladeというのでGUIを作成すると便利であると。便利そうだが、どこにどんなツールがあるか覚えないと使えない。

画像を表示する

テキストウィジェット

図形を描写したりするやつ

Cairoを使用する

リストボックス的ななにか

Gladeの暴走

理由はわからないが、Gladeが暴走することが結構ある気がする。何が悪いのかよくわからない。

簡易Webブラウザ

簡易Webブラウザ(Glade使ったやつ)

資料みっけ

PDFの1ページ目を表示するやつ

やっぱり、Webサイトの表示とか、PDFの表示とか、Ruby/Tkでやりたかったけどできなかった事が簡単にできて嬉しいわけです。

Gladeでのツールバーの作り方 資料

https://developer.gnome.org/gnome-devel-demos/stable/toolbar_builder.py.html.en
コードを一切書かなくてもそれなりにツールバーが作れちゃうので便利なのはわかるけど、ウチの環境だと高確率でGladeが暴走する。
他所ではGlade安定しているんだろうか。

最小限ターミナル

GTKソースコード見るやつ

Gtk2 と Gtk3 で微妙にネーミングが変わってるから注意。
Ruby/Tk が懐かしいので、tapを使って Ruby/Tk っぽい見た目にしてみた。
こっちの書き方の方が良いとは限らないんだけど、なんとなくそれっぽさがある。
GtkにはGlade先生がついているから、こんなGUIの入れ子関係を模倣したネストなんか要らないんだけどね。

キーバインドを拾う

ループ処理を行う

GLib::Timeoutを使う

GStreamerが難しい

せっかくRuby/TkではなくてRuby/GTKなので、音楽やビデオを再生したいのだが、GStreamerがよくわからなくて困る。GStreamerといえば、darknetで使うOpenCVをインストールするときにエラーを生じがちなアレというイメージ。



難しい、難しいと思っていても、時間をかけて眺めているとある程度わかってくることも多いので今日はこんな感じ。

最小限mp3再生Gstreamer

結局Gstreamerが何なのかはよくわからず。ひとまずplaybinを使うとmp3再生できた。他の形式も再生できて便利。

webm形式や、ogg形式のビデオもこれで再生できるようだ。mp4は音だけ出ている。
gstreamerはsynapticでパッケージ検索するだけでも大量にヒットするし、追加のパッケージを色々インストールすれば、mp4のビデオも再生できるのかも知れないが、よくわからない。

クリアコード謹製の資料
http://www.clear-code.com/blog/2014/7/22.html

テキストビューの内容を通知するやつ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です