初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記

【スポンサーリンク】



【tkinter.ttk】Comboboxの使い方【Python】

Comboboxはテキストボックスとリストボックスを組み合わせたようなウィジェットです。

外観は1行のテキストボックスですが、右端の▼をクリックするとあらかじめ設定された既存の値から選択することもできます。

ユーザーは直接任意の値を入力することもできますし、既存のリストから選択することもできるという汎用性の高いウィジェットとなっています。

今回は、コンボボックスで選択した値をラベルに表示させる方法について、実際にコードを作成しながらまとめました。

選択した値をラベルに表示するコンボボックス

コンボボックスの基本

まずは、コンボボックスの外観を示します。

f:id:vigilantPotato:20190518120135p:plain

見た目は普通の一行のテキストボックスですが、右端の▼を押してみると、既存の値がリストで表示されます。

f:id:vigilantPotato:20190518120147p:plain

例として、「Easy」、「Normal」、「Hard」という3つの文字列を初期値として与えてあります。

一つ選択してみると、コンボボックスに選択した文字列が表示されます。

f:id:vigilantPotato:20190518120226p:plain

このようなコンボボックスは様々なアプリで使用されており、省スペースかつ便利なウィジェットです。

[↑ 目次へ]

動作内容

選択した値をラベルに表示させる機能を持つコンボボックスを作成します。

最初に、完成したアプリの起動時の画面を以下に示します。

f:id:vigilantPotato:20190518120327p:plain

ラベルとコンボボックスが並べてあります。

コンボボックスから既存の値を選択すると、ラベルの表記が選択した値に変わります。

f:id:vigilantPotato:20190518120408p:plain

コンボボックスの基礎である、選択した値を取得して表示する機能を実装することができました。

[↑ 目次へ]

コードの説明

準備

まずはモジュールのインポートし、tkinterのトップレベルウィジェットを作成します。

今回インポートするモジュールはtkinterとtkinter.ttkです。

import tkinter
from tkinter import ttk

#2.Comboboxクラス

if __name__ == "__main__":
    root = tkinter.Tk()
    
    #1.変数の設定
    #3.ラベル、コンボボックスの生成

    root.mainloop()

1.変数の設定

コンボボックスで選択した値を格納する変数として、tkinter.Stringvarオブジェクトを生成します。

#1.変数の設定
var = tkinter.StringVar(master=root)

この変数varを用いて、コンボボックスで選択した値をラベルに反映させます。

具体的には、ラベルのtextvariableオプションに変数varを設定し、かつコンボボックスで選択した値を変数varにセットすることで、コンボボックスで選択した値がラベルの表示値に反映されるようになります。

2.Comboboxクラス

ttk.Comboboxクラスを継承し、選択した値を変数varにセットするコンボボックスクラスを作成していきます。クラス名はTestComboboxとしました。

#2.Comboboxクラス
class TestCombobox(ttk.Combobox):
    def __init__(self, var, master=None):
        li = ['Easy', 'Normal', 'Hard']     #初期値
        super().__init__(master, values=li) #初期値の設定
        self.var = var                      #varをインスタンス変数化
        self.bind(                          #値選択時にshow_selectedを実行
            '<<ComboboxSelected>>',
            self.show_selected
            )
        
    def show_selected(self, event):
        self.var.set(self.get())    #選択した値をvarにセット

最初に、コンボボックスのvaluesオプションで初期値を設定しています。

コンボボックスで値を選択すると、ComboboxSelectedイベントが発生するため、それをbindでshow_selectedメソッドを呼び出しています。

show_selectedメソッドでは、選択した値をgetメソッドで取得し、変数varにセットしています。

3.ラベル、コンボボックスの生成

ラベルとコンボボックスを生成していきます。

#3.ラベル、コンボボックスの生成
l = tkinter.Label(textvariable=var)
c = TestCombobox(master=root, var=var)
l.pack()
c.pack()

ラベル生成時にtextvariableオプションで変数varをセットしています。これでvarの値が変化するとラベルの表示値も変化するようになります。

[↑ 目次へ]

コード全体

import tkinter
from tkinter import ttk

#2.Comboboxクラス
class TestCombobox(ttk.Combobox):
    def __init__(self, var, master=None):
        li = ['Easy', 'Normal', 'Hard']     #初期値
        super().__init__(master, values=li) #初期値の設定
        self.var = var                      #varをインスタンス変数化
        self.bind(                          #値選択時にshow_selectedを実行
            '<<ComboboxSelected>>',
            self.show_selected
            )
        
    def show_selected(self, event):
        self.var.set(self.get())    #選択した値をvarにセット


if __name__ == "__main__":
    root = tkinter.Tk()
    
    #1.変数の設定
    var = tkinter.StringVar(master=root)
    #3.ラベル、コンボボックスの生成
    l = tkinter.Label(textvariable=var)
    c = TestCombobox(master=root, var=var)
    l.pack()
    c.pack()

    root.mainloop()

[↑ 目次へ]