Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5分で学ぶGTK+
Search
Masafumi Yokoyama
March 16, 2014
Technology
65
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分で学ぶGTK+
デスクトップアプリケーションを作る会@札幌 2014-03-16の資料です。
Masafumi Yokoyama
March 16, 2014
More Decks by Masafumi Yokoyama
See All by Masafumi Yokoyama
Rabbit on Sinatra
myokoym
1
140
文字コード略歴
myokoym
1
400
Other Decks in Technology
See All in Technology
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
240
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
23
7.5k
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
540
【FinOps】データドリブンな意思決定を目指して
z63d
0
310
コミットの「なぜ」を読む
ota1022
0
120
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
120
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
220
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
860
自宅LLMの話
jacopen
1
720
Featured
See All Featured
Paper Plane
katiecoart
PRO
1
52k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
370
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Typedesign – Prime Four
hannesfritz
42
3.1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Designing for Timeless Needs
cassininazir
1
260
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Crafting Experiences
bethany
1
190
Music & Morning Musume
bryan
47
7.2k
How to build a perfect <img>
jonoalderson
1
5.7k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
Transcript
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 5分で学ぶGTK+ Ruby/GTK2のサンプルもあるよ! @myokoym
Ruby-GNOME2 Project Team デスクトップアプリケーションを作る会 2014/03/16
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には ハンズオンであり、もくもく
会だと思う者にはもくもく会 である
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 もくもく会だと思う⼈ もくもくしてください 相談などはいつでもどうぞ
:-) ✓ ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 ハンズオンだと思う⼈ スライドにサンプルコードを映 すので、参考にしながら進めて
ください ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 ここでアンケートです
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Q.1 Ruby(1.9.3以降)はインストー ル済みですか?
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Noの⽅ 個別に対応します ✓
2014年3⽉16⽇現在、Ruby/GTK2はWindows用のRuby x64版では動かないため、x86版をインストールしてくださ い
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Q.2 Ruby/GTK2はインストール済み ですか?
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Noの⽅ Ruby 1.9.3
or 2.0.0 or 2.1.x $ gem install gtk2 ✓ Ruby 2.2.0-dev $ git clone https://github.com/ruby-gnome2/ruby-gnome2 $ cd ruby-gnome2 $ rake gem:install ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 インストールを待つ間に GTK+ の紹介をします
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 GTK+ とは GUIツールキット
オープンソース ✓ マルチプラットフォーム ✓ ⾊々な⾔語から使える ✓ ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 用語 ウィジェット ✓
イベント(シグナル) ✓ メインループ ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 ウィジェット GUIを構成する部品 ウィンドウ
✓ ボタン ✓ など ✓ ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 イベント(シグナル) ユーザーの操作で発⽣ ウィンドウを閉じる
✓ ボタンをクリックする ✓ など ✓ ✓
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 メインループ イベントを待つ 1.
イベントに応じて処理を⾏う 2. 1に戻る 3.
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 座学は以上ですが、そろそろ インストールできましたか?
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 では、実際に⼿を動かして Ruby/GTK2を使ったデスク トップアプリケーションを作
成していきます
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 サンプルコード全⽂ https://gist.github.com/myokoym/9489619
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Hello, GUI! require
"gtk2" window = Gtk::Window.new window.signal_connect("destroy") do Gtk.main_quit end window.show_all Gtk.main
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 Hello, GUI! require
"gtk2" #Ruby/GTK2を使う準備 # ウィンドウ・ウィジェットのオブジェクトを作成 window = Gtk::Window.new # ウィンドウが閉じられたら処理が実行される window.signal_connect("destroy") do Gtk.main_quit #メインループ終了 end window.show_all #ウィジェットを画面に表示 Gtk.main #メインループ開始
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 実⾏ $ ruby
hello_gui.rb
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 タイトルを設定 window =
Gtk::Window.new # ウィンドウのtitleプロパティに設定 window.title = "Image Viewer sample" window.signal_connect("destroy") do Gtk.main_quit end
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 画像を表⽰ window.signal_connect("destroy") do
Gtk.main_quit end path = ARGV[0] image = Gtk::Image.new image.pixbuf = Gdk::Pixbuf.new(path) window.add(image) #ウィンドウに画像を追加
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 実⾏ $ ruby
image-viewer.rb ファイル名
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 画像を2枚以上並べる hbox =
Gtk::HBox.new(false, 8) hbox.border_width = 8 window.add(hbox) ARGV.each do |path| image = Gtk::Image.new image.pixbuf = Gdk::Pixbuf.new(path) hbox.add(image) end
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 実⾏ $ ruby
image-viewer.rb ファイル名 ファイル名
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 ワイルドカードを許容 ARGV.each do
|path_or_wildcard| Dir.glob(path_or_wildcard) do |path| image = Gtk::Image.new image.pixbuf = Gdk::Pixbuf.new(path) hbox.add(image) end end
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 実⾏ $ ruby
image-viewer.rb ディレクトリ名/*.png
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 画像以外をスキップ begin pixbuf
= Gdk::Pixbuf.new(path) rescue GLib::FileError, Gdk::PixbufError $stderr.puts($!.message) next end image = Gtk::Image.new image.pixbuf = pixbuf hbox.add(image)
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 実⾏ $ ruby
image-viewer.rb ディレクトリ名/*
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 デフォルトサイズを設定 window =
Gtk::Window.new window.title = "Image Viewer sample" window.set_default_size(640, 480) window.signal_connect("destroy") do Gtk.main_quit end
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 スクロールバーを追加 scrolled_window =
Gtk::ScrolledWindow.new window.add(scrolled_window) hbox = Gtk::HBox.new(false, 8) hbox.border_width = 8 scrolled_window.add_with_viewport(hbox)
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 スクロール不要時は消す scrolled_window =
Gtk::ScrolledWindow.new scrolled_window.set_policy(:automatic, :automatic) window.add(scrolled_window) hbox = Gtk::HBox.new(false, 8) hbox.border_width = 8 scrolled_window.add_with_viewport(hbox)
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 右クリックメニューの準備 scrolled_window.add_with_viewport(hbox) menu
= Gtk::Menu.new menu_item = Gtk::ImageMenuItem.new(Gtk::Stock::DELETE) menu_item.signal_connect("activate") do hbox.remove(menu.attach_widget) end menu.append(menu_item) menu.show_all
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 右クリックで削除機能 event_box.signal_connect("button-press-event") do
|widget, event| if event.kind_of?(Gdk::EventButton) and event.button == 3 menu.attach_widget = widget menu.popup(nil, nil, event.button, event.time) end end hbox.add(event_box) image = Gtk::Image.new image.pixbuf = pixbuf event_box.add(image)
5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 参考リンク Ruby/GTK2 チュートリアル
http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut Ruby/GTK2 sample https://github.com/ruby-gnome2/ruby-gnome2/tree/ master/gtk2/sample Ruby/GTK3 sample https://github.com/ruby-gnome2/ruby-gnome2/tree/ master/gtk3/sample