Pygtk-combobox-class

提供:Dev Guides
移動先:案内検索

PyGTK-ComboBoxクラス

ComboBoxは、あらゆるGUIツールキットの強力で人気のあるウィジェットです。 ユーザーが選択できるアイテムのドロップダウンリストを提供します。 gtk.ComboBoxウィジェットはCellLayoutインターフェースを実装し、アイテムの表示を管理するための多くのメソッドを提供します。

gtk.ComboBoxクラスのオブジェクトはListSoreに関連付けられています。ListSoreは、アイテムのコレクションを表示するウィジェットで使用できるリストモデルです。 アイテムはappend()メソッドでListStoreに追加されます。 さらに、CellRendererTextオブジェクトが作成され、コンボボックスにパックされます。

以下の手順に従って、コンボボックスをセットアップします。

combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)

PyGTKは便利なメソッドを提供します—リストストアを使用する代わりにコンボボックスを作成する* gtk.combo_box_new_text()*。 関連する便利なメソッドappend_text()、prepend_text()、insert_text()およびremove_text()は、コンボボックスのコンテンツを管理するために使用されます。

gtk.ComboBoxクラスには次のメソッドがあります-

S.NO Methods and Description
1

set_wrap_width()

ポップアップテーブルレイアウトに表示される列の数を設定します

2

get_active()

現在アクティブなアイテムのモデルのインデックスである「アクティブ」プロパティの値を返します

3

set_active()

combo_boxのアクティブアイテムを、指定されたモデルインデックスを持つアイテムに設定します。

4

set_model()

コンボボックスで使用されるモデルを設定します

5

append_text()

テキストで指定された文字列を、コンボボックスリストストアに保存されている文字列のリストに追加します。

6

Insert_text()

コンボボックスgtk.ListStoreのテキストで指定された文字列を、位置で指定されたインデックスに挿入します

7

prepend_text()

テキストで指定された文字列を、リストストアに格納されている文字列のリストの先頭に追加します

8

remove_text()

関連付けられたリストストアの位置で指定されたインデックスの文字列を削除します

9

get_active_text()

現在アクティブな文字列を返します

ComboBoxウィジェットは次の信号を発します-

changed This is emitted when a new item in the combo box is selected
move_active This is a keybinding signal which gets emitted to move the active selection.
Popdown This is a keybinding signal which gets emitted to popdown the combo box list. The default bindings for this signal are Alt+Up and Escape
Popup This is a keybinding signal which gets emitted to popup the combo box list. The default bindings for this signal are Alt+Down.

ComboBoxのデモ用の2つのサンプルコードを以下に示します。

例1

この例では、ListStoreに一般的なPython GUIツールキットの名前が入力され、ComboBoxウィジェットに関連付けられています。 ユーザーが選択すると、変更された信号が出力されます。 ユーザーの選択を表示するコールバック関数に接続されています。

import pygtk
pygtk.require('2.0')
import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("ComboBox with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)

      combobox = gtk.ComboBox()
      store = gtk.ListStore(str)
      cell = gtk.CellRendererText()
      combobox.pack_start(cell)
      combobox.add_attribute(cell, 'text', 0)
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(combobox, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)
      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)

      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      combobox.set_model(store)
      combobox.connect('changed', self.on_changed)
      combobox.set_active(0)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      return

   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
      return

if __name__ == '__main__':
PyApp()
gtk.main()

実行すると、プログラムは次の出力を表示します-

ComboBox

例2

プログラムの2番目のバージョンは、コンボボックスとappend_text()関数を作成して文字列を追加するために、便利なメソッド* combo_box_new_text()を使用します。 どちらのプログラムでも、 get_active_text()*メソッドを使用してユーザーの選択を取得し、ウィンドウのラベルに表示します。

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Simple ComboBox")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)

      cb = gtk.combo_box_new_text()
      cb.connect("changed", self.on_changed)
      cb.append_text('PyQt')
      cb.append_text('Tkinter')
      cb.append_text('WxPython')
      cb.append_text('PyGTK')
      cb.append_text('PySide')

      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)

      fixed.put(cb, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)

      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()

   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
if __name__ == '__main__':
   PyApp()
   gtk.main()

このプログラムの出力は、前のプログラムの出力に似ています。

ComboBox