どうも。ガジェット好き組み込みエンジニアのひろです。
このシリーズは最終的に実際に記事に出てきた技術を駆使してGUIアプリを作るようなシリーズになっています
今回実装する機能はプルダウンの表示についてです。
これまでの記事を読んでいない方は読んでいただけると幸いです。
ソースコードはこちらからどうぞ!
第1回 基本的な画面表示の仕方
第2回 ラベル・ボタン表示
第3回 ボタン処理
第4回 文字入力と取得
Tkinterでのプルダウン表示・使用方法
全体実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# coding:utf-8 import tkinter from tkinter import messagebox as tkMessageBox from tkinter import ttk count = 0 StringBox = 0 combo = "" exchange = { "こんにちは":"Hello", "いくらですか?":"How much is it?", "おげんきですか?":"How are you?" } class ButtonFunction(): # ボタン押下時カウントがいくつか表示する def Total(event): inputString = StringBox.get() translation = combo.get() if (translation in exchange.keys()): transDisplay = exchange.get(translation) tkMessageBox.showinfo('確認', '合計=' + str(count) + '押されました.\n[message]' + inputString + "[" + transDisplay + "]") # ボタンが押されたら+1する関数 def CountUp(event): global count count += 1 CountLabel['text'] = str(count) # ボタンが押されたら-1する関数 def CountDown(event): global count if count > 0: count -= 1 CountLabel['text'] = str(count) def Display(): global CountLabel global StringBox global combo # 画面表示 root = tkinter.Tk() # ウィンドウ名 root.title("sample") # ウィンドウの大きさを設定 root.geometry("550x600") # ラベル表示 Label1 = tkinter.Label(text="Hello World!") Label1.pack() CountLabel = tkinter.Label(text='0') CountLabel.pack() # ボタン表示 TotalButton = tkinter.Button(text="合計表示") TotalButton.bind("<Button-1>", ButtonFunction.Total) TotalButton.place(x=245, y=80) CountButton = tkinter.Button(text='カウントアップ') CountButton.bind("<Button-1>", ButtonFunction.CountUp) CountButton.place(x=170, y=50) CountButton = tkinter.Button(text='カウントダウン') CountButton.bind("<Button-1>", ButtonFunction.CountDown) CountButton.place(x=285, y=50) # エントリーボックス表示 ''' 日本語入力だと確定前の文字が表示されない ''' StringBox = tkinter.Entry(width=50) StringBox.place(x=50, y=110) # プルダウン表示 combo = ttk.Combobox(root, state="readonly", width=15) combo["values"] = ("こんにちは", "いくらですか?", "気分はどうですか?") combo.place(x=180, y=150) root.mainloop() if __name__ == '__main__': Display() |
実装したコード
プルダウンで選択されたものを任意の文字(値)変換する辞書
1 2 3 4 5 |
exchange = { "こんにちは":"Hello", "いくらですか?":"How much is it?", "おげんきですか?":"How are you?" } |
プルダウンUI表示
1 2 3 4 |
# プルダウン表示 combo = ttk.Combobox(root, state="readonly", width=15) combo["values"] = ("こんにちは", "いくらですか?", "気分はどうですか?") combo.place(x=180, y=150) |
実行結果
合計ボタン押下前
プルダウン中身表示
合計ボタン押下後
コード解説
プルダウン表示の実装
ttkメソッドのComboboxを使用することでプルダウンを表示することができます。
プルダウンに表示する内容はComboboxオプションの【values】を使うことで設定することができます。
今回の実装ではComboboxはcomboに代入しているのでcombo["values"] = (表示したい文字列)で任意の文字列を設定することができます。
プルダウンに日本語を表示し、exchangeという辞書(連想配列)に日本語に対する英訳を格納しています。
辞書とは配列の1種でkeyとvalueの2つセットで1つの要素という考えの配列です。
keyを指定するとそれに対応するvalueが取れる仕様になっています。
今回プルダウンで選択されたkeyの値をdef Total(event)メソッド内で検索し、辞書にある場合はvalueを変数に代入するように実装しています。
具体的な実装は以下になります。
1 2 3 |
translation = combo.get() if (translation in exchange.keys()): transDisplay = exchange.get(translation) |
ここで取得したvalueの値を合計表示ボタンが押下されたときにポップアップ内の文字列に表示するように設定しています。
以前僕がSlackに投稿してくれるアプリを開発したときにもこの辞書とプルダウンを組み合わせてチャンネル指定、拡張子指定ができるように実装しました。
Comboboxには他にもオプションがあるので使用する際には調べてみてください!
組み合わせ次第で実現できる機能は色々あると思いますので、いろいろ試して自分の実現したい機能を実装していきましょう!
Tkinterでのプルダウン表示と使い方についてのまとめ
Tkinterを使ったプルダウンの表示と使い方については以下になります。
- ttkメソッドのComboboxを使用してプルダウンを表示することができる。
- Comboboxのオプション【values】でプルダウンに表示する値を設定する
- 辞書と組み合わせることで選択された値を変換することができる。
プルダウンを使用できるようになることで家計簿アプリ、読書管理アプリ等の管理系のアプリ開発でカテゴリに分けて保存するような機能が実装できるようになるので積極的に使っていきましょう!
不明点などがあればTwitterのDMでお待ちしております!
最後まで読んでくださりありがとうございます。
技術系記事