Python
 Computer >> コンピューター >  >> プログラミング >> Python

Tkinter Comboboxで選択したオプションのインデックスを取得する方法

ドロップダウンリストを作成し、ユーザーがリスト内の項目を選択できるようにしたい場合は、TkinterのComboboxウィジェットを使用します。Comboboxウィジェットを使うと、項目の一覧から瞬時に選択できるドロップダウンリストを簡単に実装できます。

ここで重要なのが、ユーザーが選択した項目のインデックス(位置番号)を取得する方法です。これには current() メソッドを使用します。current()メソッドは、現在選択されている項目のインデックスを整数値として返します。なお、何も選択されていない状態では -1 が返される点にも注意してください。

コード例

実際に動作を確認してみましょう。この例では、曜日の一覧を含むドロップダウンリストを作成し、ユーザーがリストから曜日を選択するたびに、選択された項目のインデックスと値をLabelウィジェットに表示します。インデックスは整数値として返されるため、文字列と連結して表示する際には str() 関数による型変換が必要です。

# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk

# tkinterフレーム(ウィンドウ)のインスタンスを作成
win = Tk()

# ウィンドウのサイズを設定
win.geometry("700x350")

# コンボボックスの選択をクリアする関数
def clear_cb():
    cb.set('')
    
# 曜日のタプルを定義
days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')

# 選択されたオプションのインデックスを表示する関数
def callback(*arg):
    Label(win, text="The value at index " + str(cb.current()) + " is" + " " + str(var.get()), font=('Helvetica 12')).pack()
    
# コンボボックスウィジェットを作成
var = StringVar()
cb = ttk.Combobox(win, textvariable=var)
cb['values'] = days
cb['state'] = 'readonly'
cb.pack(fill='x', padx=5, pady=5)

# 変数の変更を監視するトレースを設定
var.trace('w', callback)

# 選択内容をクリアするためのボタンを作成
button = Button(win, text="Clear", command=clear_cb)
button.pack()

win.mainloop()

ポイント解説

このコードの仕組みは以下の通りです。

1. StringVarとtextvariableの連携: StringVarオブジェクトをコンボボックスの textvariable に設定することで、選択内容の変更を自動的に検知できます。

2. trace()による変更監視: var.trace('w', callback) を呼び出すことで、変数に書き込み(変更)が発生したタイミング、つまりユーザーが項目を選択した瞬間にcallback関数が実行されます。

3. current()でインデックス取得: callback関数内で cb.current() を呼び出すことで、選択された項目のインデックス(0から始まる整数)を取得し、Labelウィジェットに表示しています。

実行結果

上記のコードを実行すると、曜日のリストを含むコンボボックスが表示されます。リストから任意の曜日を選択するたびに、そのインデックスと対応する項目名がLabelウィジェット上に出力されます。

Tkinter Comboboxで選択したオプションのインデックスを取得する方法

  1. Tkinterでラベルのテキストを取得する方法を解説

    TkinterのLabel(ラベル)ウィジェットは、ウィンドウ上にテキストや画像を表示するために使用される基本的なコンポーネントです。フォントファミリーやパディング、幅・高さなどのオプションを指定することで、ラベルの見た目を自由にカスタマイズできます。ラベルに設定したテキストを取得したい場合は、ラベルウィジェットに対して [text] を指定するだけで、簡単にその値へアクセスできます。以下に具体的なサンプルコードを示します。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウ

  2. Tkinterのリストボックスで選択した複数の項目を一括削除する方法

    はじめに TkinterのListboxウィジェットでリストボックスを作成した際、ユーザーが選択した複数の項目をまとめて削除したいケースはよくあります。本記事では、その実装方法をサンプルコードとともにわかりやすく解説します。 複数選択を有効にするには デフォルト設定のリストボックスでは、1つの項目しか選択できません。複数の項目を選択できるようにするには、selectmodeオプションにMULTIPLEを指定します。 削除処理のポイントは、curselection()メソッドで現在選択されている項目のインデックスを取得し、後ろのインデックスから順番にdelete()メソッドを呼び出すことです。