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