目的
Gtk.ComboBoxTextは、Gtk4.10より非推奨となったWidgetですが、Gtk4では利用し続けることが可能なので、その使い方を見ていきます。代替Widgetは、Gtk.DorpDownです。
今回は、Gtk.ComboBoxTextに①項目を追加する方法、②テキスト入力を可能にする方法、③Gtk.ComboBoxTextに表示されている値の取得方法を見ます。
Gtk.ComboBoxTextの設定
Gtk.ComboBoxTextの外観や動作、項目の操作は、プロパティやメソッドを使用して指定します。
項目を追加する
Gtk.ComboBoxTextへ順番に項目を追加するのにはメソッドappend_text()を使用します。その他にも項目の操作には、append()、insert()、insert_text()、prepend()、prepend_text()、remove()、remove_all()があります。
テキスト入力を可能にする
Gtk.ComboBoxTextをテキスト入力可能にするのには、定義時にメソッドnew_with_entry()や、プロパティhas_entryを使用します。
プロパティで指定する場合、テキスト入力を可能にするのは「has_entry=True」となります。ハイフンでは無く、アンダーバーを使用していることにご注意ください。
表示している値を取得する
Gtk.ComboBoxTextに表示した値を取得するのには、メソッドget_active_text()を使用します。このメソッドは、項目が選択されていたらそれを(型:str)を、選択されていなければNoneを返します。
Gtk.ComboBoxTextのサンプルプログラム
以下のサンプルプログラムを実行すると、下図のような2組のGtk.LabelとGtk.ComboBoxText、GtkButtonが表示されます。①テキスト入力不可横のGtk.ComboBoxTextは、選択を変更した場合にターミナルに選択した項目を表示します。②テキスト入力可横のGtk.ComboBoxText(combo2)は登録した選択肢の他にテキスト入力が可能になっています。Gtk.Button(ラベルが「取得」のもの)を押すと、combo2に表示されている文字をターミナルに表示します。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
APPID = 'com.github.taniyoshima.g4_fblog_comboboxtext'
class Gtk4TestTest(Gtk.Window):
def __init__(self, app):
Gtk.Window.__init__(
self, application=app, title='Gtk.ComboboxTex Test')
grid = Gtk.Grid(
width_request=350, height_request=200,
margin_top=20, margin_bottom=20,
margin_start=20, margin_end=20,
column_spacing=30, row_spacing=30,
hexpand=True, vexpand=True,
)
label1 = Gtk.Label(label='①テキスト入力不可', xalign=0.0)
num = [
'number 1',
'number 2',
'number 3',
]
combo1 = Gtk.ComboBoxText()
combo1.connect("changed", self.on_combo1_changed)
for data in num:
combo1.append_text(data)
combo1.set_active(0)
label2 = Gtk.Label(label='②テキスト入力可', xalign=0.0)
moji = [
'AAA',
'BBB',
'CCC',
]
self.combo2 = Gtk.ComboBoxText.new_with_entry()
for data in moji:
self.combo2.append_text(data)
button = Gtk.Button(label='取得')
button.connect('clicked', self.on_button_clicked)
grid.attach(label1, 0, 0, 1, 1)
grid.attach(combo1, 1, 0, 1, 1)
grid.attach(label2, 0, 1, 1, 1)
grid.attach(self.combo2, 1, 1, 1, 1)
grid.attach(button, 1, 2, 1, 1)
self.set_child(grid)
def on_combo1_changed(self, combo):
text = combo.get_active_text()
if text is not None:
print("Combo1の値 : %s" % text)
def on_button_clicked(self, button):
text = self.combo2.get_active_text()
if text == '':
print('Combo2は、選択及び入力がされていません')
else:
print("Combo2の値 : %s" % text)
class Gtk4TestApp(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self, application_id=APPID)
def do_activate(self):
window = Gtk4TestTest(self)
window.present()
def main():
app = Gtk4TestApp()
app.run()
if __name__ == '__main__':
main()
31〜36行目 combo1(①テキスト入力不可のコンボボックス)の定義
32行目 シグナル”changed”と関数on_combo1_changedとの紐付け
33〜34行目 combo1への項目の追加
36行目 初期値を設定する
45〜47行目 self.combo2(②テキスト入力可のコンボボックス)の定義
関数on_button_clickedで使用するため、self.combo2にしています。
45行目 entryを持つGtk.ComboBoxTextの定義
46〜47行目 self.combo2への項目の追加
60〜63行目 関数on_combo1_chenged()
combo1を変更した場合の処理:combo1の値をターミナルに表示します。
65〜70行目 関数on_button_clicked()
buttonを押した場合の処理:self.combo2の値をターミナルに表示します。
まとめ
- Gtk.ComboBoxTextへの項目の(実行した順番に)追加には、メソッドappend_text()を使用します。
- Gtk.ComboBoxTextをテキスト入力可能にするのには、定義時にメソッドnew_with_entry()や、プロパティhas_entryを使用します。
- Gtk.ComboBoxTextに表示した値を取得するのには、メソッドget_active_text()を使用します。
次回の予定
次回は、Gtk.ComboBoxの使用方法について見ていきます。