5分で学ぶgtk+ - rabbit slide show€¦ · 5分で学ぶgtk+ -...

36
5GTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 5分で学ぶGTK+ Ruby/GTK2のサンプルもあるよ! @myokoym Ruby-GNOME2 Project Team デスクトップアプリケーションを作る会 2014/03/16

Upload: others

Post on 11-Jun-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

5分で学ぶGTK+Ruby/GTK2のサンプルもあるよ!

@myokoymRuby-GNOME2 Project Teamデスクトップアプリケーションを作る会

2014/03/16

Page 2: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

はじめに

ハンズオンだと思う者にはハンズオンであり、もくもく会だと思う者にはもくもく会である

Page 3: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

もくもく会だと思う⼈

もくもくしてください相談などはいつでもどうぞ :-)✓

Page 4: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

ハンズオンだと思う⼈

スライドにサンプルコードを映すので、参考にしながら進めてください

Page 5: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

ここでアンケートです

Page 6: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 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以降)はインストール済みですか?

Page 7: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

Noの⽅

個別に対応します✓

2014年3⽉16⽇現在、Ruby/GTK2はWindows用のRuby x64版では動かないため、x86版をインストールしてください

Page 8: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

Q.2

Ruby/GTK2はインストール済みですか?

Page 9: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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

Page 10: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

インストールを待つ間にGTK+ の紹介をします

Page 11: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

GTK+ とは

GUIツールキットオープンソース✓

マルチプラットフォーム✓

⾊々な⾔語から使える✓

Page 12: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

用語

ウィジェット✓

イベント(シグナル)✓

メインループ✓

Page 13: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

ウィジェット

GUIを構成する部品ウィンドウ✓

ボタン✓

など✓

Page 14: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

イベント(シグナル)

ユーザーの操作で発⽣ウィンドウを閉じる✓

ボタンをクリックする✓

など✓

Page 15: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

メインループ

イベントを待つ1.

イベントに応じて処理を⾏う2.

1に戻る3.

Page 16: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

座学は以上ですが、そろそろインストールできましたか?

Page 17: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

では、実際に⼿を動かしてRuby/GTK2を使ったデスクトップアプリケーションを作

成していきます

Page 18: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

サンプルコード全⽂

https://gist.github.com/myokoym/9489619

Page 19: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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_quitend

window.show_all

Gtk.main

Page 20: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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 #メインループ開始

Page 21: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

実⾏

$ ruby hello_gui.rb

Page 22: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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_quitend

Page 23: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

画像を表⽰

window.signal_connect("destroy") do Gtk.main_quitend

path = ARGV[0]

image = Gtk::Image.newimage.pixbuf = Gdk::Pixbuf.new(path)window.add(image) #ウィンドウに画像を追加

Page 24: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

実⾏

$ ruby image-viewer.rb ファイル名

Page 25: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

画像を2枚以上並べる

hbox = Gtk::HBox.new(false, 8)hbox.border_width = 8window.add(hbox)

ARGV.each do |path| image = Gtk::Image.new image.pixbuf = Gdk::Pixbuf.new(path) hbox.add(image)end

Page 26: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

実⾏

$ ruby image-viewer.rb ファイル名 ファイル名

Page 27: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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) endend

Page 28: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

実⾏

$ ruby image-viewer.rb ディレクトリ名/*.png

Page 29: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

画像以外をスキップ

begin pixbuf = Gdk::Pixbuf.new(path)rescue GLib::FileError, Gdk::PixbufError $stderr.puts($!.message) nextend

image = Gtk::Image.newimage.pixbuf = pixbufhbox.add(image)

Page 30: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

実⾏

$ ruby image-viewer.rb ディレクトリ名/*

Page 31: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

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_quitend

Page 32: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

スクロールバーを追加

scrolled_window = Gtk::ScrolledWindow.newwindow.add(scrolled_window)

hbox = Gtk::HBox.new(false, 8)hbox.border_width = 8scrolled_window.add_with_viewport(hbox)

Page 33: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

スクロール不要時は消す

scrolled_window = Gtk::ScrolledWindow.newscrolled_window.set_policy(:automatic, :automatic)window.add(scrolled_window)

hbox = Gtk::HBox.new(false, 8)hbox.border_width = 8scrolled_window.add_with_viewport(hbox)

Page 34: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

右クリックメニューの準備

hbox = Gtk::HBox.new(false, 8)hbox.border_width = 8scrolled_window.add_with_viewport(hbox)

menu = Gtk::Menu.newmenu_item = Gtk::ImageMenuItem.new(Gtk::Stock::DELETE)menu_item.signal_connect("activate") do hbox.remove(menu.attach_widget)endmenu.append(menu_item)menu.show_all

Page 35: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

右クリックで削除機能

event_box = Gtk::EventBox.newevent_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) endendhbox.add(event_box)

image = Gtk::Image.newimage.pixbuf = pixbufevent_box.add(image)

Page 36: 5分で学ぶGTK+ - Rabbit Slide Show€¦ · 5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2 はじめに ハンズオンだと思う者には

5分で学ぶGTK+ - Ruby/GTK2のサンプルもあるよ! Powered by Rabbit 2.1.2

参考リンク

Ruby/GTK2 チュートリアルhttp://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut

Ruby/GTK2 samplehttps://github.com/ruby-gnome2/ruby-gnome2/tree/master/gtk2/sample

Ruby/GTK3 samplehttps://github.com/ruby-gnome2/ruby-gnome2/tree/master/gtk3/sample