【完全独学Python】Tkinterでプルダウン(Combobox)を作る!

デスクトップアプリ

こんにちは!ゆーや(@yuyamanm118712)です。

こちらのページでは完全独学でWebプログラマとなった私が

デスクトップアプリには必須!!Tkinterでプルダウン(ttk.Combobox)を表示する方法をご紹介します!

GUIアプリにプルダウンが必要な場面は多いです!

最後までじっくりと読んで、一緒に学習にしていきましょう。

なお、ご指摘・ご質問はTwitter(@yuyamanm118712)のDMまでよろしくお願いします。

この記事を読むと

  • Tkinterでプルダウンが作成できる!
  • TkinterでComboboxの基本的な使い方について理解できる!
  • TkinterでComboboxのオプションについて理解できる!

ttk.Comboboxとは

TkinterのComboboxは、ユーザーが選択可能なプルダウン(ドロップダウン)リストを提供するウィジェットです!

このウィジェットはtkinter.ttkモジュールから提供されており、特定の選択肢から選ぶ場合に非常に便利です!

この記事では、Comboboxの基本的な使い方オプションをサンプルコードとともに詳しく解説します!

ゆーや
ゆーや

ttkの基本的な使い方は以下の記事を見てね!

ttk.Comboboxの基本

ttk.Combobox作成までのサンプルコード

import tkinter as tk
from tkinter import ttk

# メインウィンドウの作成
root = tk.Tk()
root.title("Combobox-完全独学Python")
root.geometry("300x200")

# Comboboxの作成
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options)
combobox.pack(padx=10, pady=10)

# メインループの実行
root.mainloop()
ゆーや
ゆーや

たったの3行プルダウンが表示されたね!

ここからComboboxの詳しい使い方を紹介していくよ!

ttk.Comboboxのオプション

選択肢のリストを指定(values)

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Combobox- valuesオプション")
root.geometry("300x200")

# Comboboxの作成
options = ["Option A", "Option B", "Option C"]
combobox = ttk.Combobox(root, values=options)
combobox.pack(padx=10, pady=10)

root.mainloop()
ゆーや
ゆーや

valuesに渡すリストの中身を変えると、選択肢が変更されることが分かったね!

ちなみにリストでなく、タプルでも動くので覚えておこう!

コンボボックスの状態を指定(state)

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Combobox- stateオプション")
root.geometry("300x200")

# Comboboxの作成
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options, state="readonly")
combobox.pack(padx=10, pady=10)

root.mainloop()
ゆーや
ゆーや

stateを「readonly」にすると、プルダウンに文字を書き込めなくなるよ!(これが普通な気もするけど…)ほかにも「normal(書き込める )」「disabled(操作不可)」もあるので、いろいろ変えて試してみてね!

コンボボックスの表示幅を文字数で指定(width)

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Combobox- widthオプション")
root.geometry("300x200")

# Comboboxの作成(幅5文字分)
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options, width=5)
combobox.pack(padx=10, pady=10)

root.mainloop()

コンボボックスが表示される直前に呼び出されるコールバック関数を指定(postcommand)

import tkinter as tk
from tkinter import ttk

def update_options():
    new_options = ["Updated 1", "Updated 2", "Updated 3"]
    combobox['values'] = new_options

root = tk.Tk()
root.title("Combobox- postcommandオプション")
root.geometry("300x200")

# Comboboxの作成
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options, postcommand=update_options)
combobox.pack(padx=10, pady=10)

root.mainloop()
ゆーや
ゆーや

コンボボックスの中身がoptionsではなく、new_optionsになっていることから

直前にupdate_optionsが呼び出されていることがわかるね!
リストの中身を作成する関数をここで呼び出すといいかも!

選択された値を保持(tk.StringVar)

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Combobox- textvariableオプション")
root.geometry("300x200")

# 選択された値を保持する変数
selected_value = tk.StringVar()

# Comboboxの作成
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options, textvariable=selected_value)
combobox.pack(padx=10, pady=10)

# 選択された値を表示するためのラベル
selected_label = ttk.Label(root, text="Selected: ")
selected_label.pack(padx=10, pady=10)

def show_selected():
    selected_label.config(text=f"Selected: {selected_value.get()}")

# 値を表示するボタンの作成
show_button = ttk.Button(root, text="Show Selected", command=show_selected)
show_button.pack(padx=10, pady=10)

root.mainloop()
ゆーや
ゆーや

こちらはたびたび出てくるStringVar

値の保持はコイツに任せましょう!

(StringVarオブジェクト).get()で値が取得できるよ!

ちなみにcombobox.get()でも取得はできる!

選択時のイベント発火(bind)

import tkinter as tk
from tkinter import ttk

def on_combobox_selected(event):
    selected_value = combobox.get()
    label.config(text=f"Selected: {selected_value}")

root = tk.Tk()
root.title("Combobox-選択変更イベント")
root.geometry("300x200")

# Comboboxの作成
options = ["Option 1", "Option 2", "Option 3"]
combobox = ttk.Combobox(root, values=options)
combobox.pack(padx=10, pady=10)

# ラベルの作成
label = ttk.Label(root, text="Selected: ")
label.pack(padx=10, pady=10)

# Comboboxの選択変更イベントをバインド
combobox.bind("<<ComboboxSelected>>", on_combobox_selected)

root.mainloop()
ゆーや
ゆーや

こちらは「プルダウンの選択を変更時」にイベントを発火したいときに使うよ!
bindに”<<ComboboxSelected>>“を渡すのを忘れずに!

まとめ

本記事では、Comboboxを使って、Tkinterで画面にプルダウン(ドロップダウン)リストを表示する方法を紹介しました!

ポイントは以下の7つです!

① Tkinterで画面にプルダウン(ドロップダウン)リストを表示するには「Combobox」を使う
② 「values」オプションは、選択肢のリストを指定
③ 「state」オプションは、コンボボックスの状態を指定
④ 「width」オプションは、コンボボックスの表示幅を文字数で指定
⑤ 「postcommand」オプションは、コンボボックスが表示される直前に呼び出されるコールバック関数を指定
⑥ 「tk.StringVar」は、選択された値を保持
⑦ 「bind<<ComboboxSelected>>)」は選択時のイベント発火

ゆーや
ゆーや

まとめの内容を見て、もう頭に浮かべば完璧!
今日もお疲れ様です!

コメント

タイトルとURLをコピーしました