PyGTK-ComboBoxクラス

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

gtk.ComboBoxクラスのオブジェクトは、アイテムのコレクションを表示するウィジェットで使用できるリストモデルである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 メソッドと説明
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ウィジェットは次のシグナルを発します-

かわった これは、コンボボックスの新しいアイテムが選択されたときに発行されます
move_active これは、アクティブな選択を移動するために発行されるキーバインディング信号です。
ポップダウン これは、コンボボックスリストをポップダウンするために発行されるキーバインド信号です。このシグナルのデフォルトのバインディングは、Alt + UpとEscapeです。
現れる これは、コンボボックスリストをポップアップするために発行されるキーバインド信号です。このシグナルのデフォルトのバインディングは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()

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

例2

プログラムの2番目のバージョンは、便利な方法を使用します combo_box_new_text()コンボボックスを作成し、append_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()

このプログラムの出力は、前のプログラムの出力と同様です。