新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

gtk2-tut-notebook

ノートブック

ノートブックウィジェットは重なった「ページ」の集まりで,各ページは異なる情報を持っていて,1度に1ページしか表示されない. このウィジェットは最近になってGUIプログラミングの中で一般的になったもので,分割表示されて然るべき情報を表示するのに適している.

最初に知っておくべきメソッドは,おそらくもうお分かりだろうが,新しいノートブックウィジェットを作成するメソッドである:

Gtk::Notebook.new

ノートブックを操作するメソッドはたくさんある.それぞれのメソッドを見てみよう.

まずはページインジケータがどの位置に見えるかを指定するものだ. ページインジケータすなわち「タブ」は,上下左右の4方向に配置可能である.

Gtk::Notebook#tab_pos=(pos)
Gtk::Notebook#set_tab_pos(pos)

引数posには以下の値のうちのいずれかを指定できる:

Gtk::POS_LEFT
Gtk::POS_RIGHT
Gtk::POS_TOP
Gtk::POS_BOTTOM

デフォルトはGtk::POS_TOPである.

次に,ノートブックにページを追加する方法を見てみよう. 追加する方法は全部で3つあるが,このうち最初の2つは似ているのでまとめてみてみよう.

Gtk::Notebook#append_page(child, tab_label = nil)
Gtk::Notebook#prepend_page(child, tab_label = nil)

これらのメソッドはページをノートブックの末尾(append),または先頭(prepend)に挿入する. childは追加するノートブックページに入るウィジェットで,tab_labelはそのページのラベルである. tab_labelを省略した場合はデフォルトのラベル('ページ N')が使用される. tab_labelには,HBoxなどWidgetを指定することができる. childは別途作成しなければならないが,大抵は色々なウィジェットを例えばテーブル?のようなコンテナウィジェットにあらかじめパックしておく.

ノートブックにページを追加する最後のメソッドは,前の2つの特性をすべて持っているが,さらにノートブック内のどの位置にページを置くかを指定できる:

Gtk::Notebook#insert_page(position, child, tab_label = nil)

引数はGtk::Notebook#appendGtk::Notebook#prependの場合と同じだが,positionという引数が増えている. これはページをどの位置に挿入するかを指定するもので,最初のページをページ0とした場合のページ番号を指定する.

次にページの削除方法を見てみよう:

Gtk::Notebook#remove_page(page_num)

このメソッドpage_numで指定されたページを取り除く.

現在表示されているページを調べるには次のメソッドを使う:

Gtk::Notebok#page

Gtk::Notebook#next_pageGtk::Notebook#prev_pageは,表示するページを前または後ろに進めるものである. ノートブックが最後のページを表示しているときにGtk::Notebook#next_pageが呼ばれると最初のページに戻り,同様に最初のページを表示しているときにGtk::Notebook#prev_pageを呼ぶと最後のページに飛ぶ.

次のメソッドは「アクティブ」なページを設定する. 例えばノートブックの5ページ目を開きたい場合などにこのメソッドを使う. このメソッドで指定しなければノートブックはデフォルトで最初のページを開く.

Gtk::Notebook#page=(page_num)
Gtk::Notebook#set_page(page_num)

次の2つのメソッドはページのタブやボーダーを追加/削除するものである:

Gtk::Notebook#show_tabs=(show_tabs)
Gtk::Notebook#set_show_tabs(show_tabs)

Gtk::Notebook#show_border=(show_border)
Gtk::Notebook#set_show_border(show_border)

次のメソッドは,ページがたくさんあってタブがページにうまく収まらない場合に便利である.

Gtk::Notebok#scrollable=(scrollable)
Gtk::Notebok#set_scrollable(scrollable)

scrollableにtrueを指定すると,タブの右端の矢印ボタンで左右にスクロールできるようになる.

notebook.png

#! /usr/bin/env/ruby
require 'gtk2'

window = Gtk::Window.new
window.signal_connect("destroy") {Gtk.main_quit}
window.border_width = 10

table = Gtk::Table.new(3, 8, false)
window.add(table)

notebook = Gtk::Notebook.new
notebook.tab_pos = Gtk::POS_TOP
table.attach_defaults(notebook, 0, 8, 0, 1)

class << notebook
	def rotate
		self.tab_pos = (self.tab_pos + 1) % 4
	end

	def tabsborder
		self.show_tabs = !self.show_tabs?
		self.show_border = !self.show_border?
	end

	def remove
		self.remove_page(self.page)
	end

	def scrollable
		self.scrollable = !self.scrollable?
	end

	def popup
		self.enable_popup = !self.enable_popup?
	end
end

(1..5).each do |i|
	frame = Gtk::Frame.new("Append Frame #{i}")
	frame.border_width = 10
	frame.set_size_request(100, 75)
	frame.add(Gtk::Label.new("Page #{i}"))
	notebook.append_page(frame, Gtk::Label.new("Page #{i}"))
end

checkbutton = Gtk::CheckButton.new("Check me please!")
checkbutton.set_size_request(100, 75)
notebook.insert_page(2, checkbutton, Gtk::Label.new("Add page"))

(1..5).each do |i|
    	frame = Gtk::Frame.new("Prepend Frame #{i}")
	frame.border_width = 10
	frame.set_size_request(100, 75)
	frame.add(Gtk::Label.new("PPage #{i}"))
	notebook.prepend_page(frame, Gtk::Label.new("PPage #{i}"))
end

notebook.page = 3
notebook.scrollable = true
notebook.enable_popup = true

button = Gtk::Button.new("close")
button.signal_connect("clicked") {Gtk.main_quit}
table.attach_defaults(button, 0, 1, 1, 2)

button = Gtk::Button.new("next page")
button.signal_connect("clicked") {notebook.next_page}
table.attach_defaults(button, 1, 2, 1, 2)

button = Gtk::Button.new("prev page")
button.signal_connect("clicked") {notebook.prev_page}
table.attach_defaults(button, 2, 3, 1, 2)

button = Gtk::Button.new("tab position")
button.signal_connect("clicked") {notebook.rotate}
table.attach_defaults(button, 3, 4, 1, 2)

button = Gtk::Button.new("tabs/border")
button.signal_connect("clicked") {notebook.tabsborder}
table.attach_defaults(button, 4, 5, 1, 2)

button = Gtk::Button.new("remove page")
button.signal_connect("clicked") {notebook.remove}
table.attach_defaults(button, 5, 6, 1, 2)

button = Gtk::Button.new("scrollable")
button.signal_connect("clicked") {notebook.scrollable}
table.attach_defaults(button, 6, 7, 1, 2)

button = Gtk::Button.new("popup")
button.signal_connect("clicked") {notebook.popup}
table.attach_defaults(button, 7, 8, 1, 2)

window.show_all
Gtk.main
更新日時:2018/08/31 18:03:35
キーワード:
参照:[gtk2-tut]