[ruby-gnome2-doc-cvs] [Hiki] create - gtk2-tut-notebook

Back to archive index

ruby-****@sourc***** ruby-****@sourc*****
2003年 9月 6日 (土) 22:30:51 JST


-------------------------
REMOTE_ADDR = 61.26.70.211
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/ja/?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')が使用される.
childは別途作成しなければならないが,大抵は色々なウィジェットを例えば((<テーブル|gtk2-tut-table>))のようなコンテナウィジェットにあらかじめパックしておく.

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

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

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

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

  Gtk::Notebook#remove_page(page_num)

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

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

  Gtk::Notebok#page

Gtk::Notebook#next_pageとGtk::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を指定すると,タブの右端の矢印ボタンで左右にスクロールできるようになる.

{{image_right "notebook.png"}}{{br}}

  #! /usr/bin/env/ruby
  require 'gtk2'
  
  Gtk.init
  
  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






ruby-gnome2-cvs メーリングリストの案内
Back to archive index