Tkinterでプルダウンを用いたい場合は「Combobox」を用いることで可能です。
ここでは、Comboboxの使用例についてまとめています。
この記事の対象
Comboboxとは?
「Combobox」とはプルダウンのコンポーネントになります。
基本的な型
import tkinter.ttk as ttk
option = ["***", "***", "***", "***"]
variable = tk.StringVar()
combo=ttk.Combobox(root,values=option,textvariable=variable)
combo.bind("<<ComboboxSelected>>")
基本的な使用方法は、「ttk.Combobox()」のvalues引数に項目を渡してあげるだけです。
よく使用するオプションは以下です。
Option | 内容 |
justify | 文字の整列指定。left, center, rightから選択 |
height | リストの高さ指定。 |
state | 状態(読み取りのみなど)の指定。normal, readonly, disabledから選択 |
textvariable | 値を保持するグローバル変数の指定。 |
values | 値のリスト指定。 |
width | 幅の指定。 |
プルダウンの生成方法
from tkinter import *
import tkinter as tk
import tkinter.messagebox as mb
import tkinter.ttk as ttk
#1---windowの作成
root = Tk()
root.title("Test")
root.configure(bg="#fffbdb")
root.geometry('640x480')
#2---プルダウン作成
option = [".bat", ".csv", ".xlsx", ".txt"]
variable = tk.StringVar()
combo=ttk.Combobox(root,values=option,textvariable=variable)
combo.bind("<<ComboboxSelected>>")
combo.pack()
root.mainloop()
上記がプログラムになります。
1の部分はウィンドウの作成になります。それでは2の部分から解説になります。
#2---プルダウン作成
option = [".bat", ".csv", ".xlsx", ".txt"]
2の部分でプルダウンを作成しています。始めにoptionでプルダウンの要素を作成しています。
variable = tk.StringVar()
次に「tk.StringVar()」で文字列を変数と指定しています。
combo=ttk.Combobox(root,values=option,textvariable=variable)
「ttk.Combobox()」では要素と変数を指定しています。
結果
プルダウンの文字列を抽出
import openpyxl
from turtle import width
import time
import tkinter as tk
import tkinter.ttk as ttk
import threading
import subprocess
def start_thread_sheet():
threadsheet = threading.Thread(target=thread_sheet)
threadsheet.start()
def thread_sheet():
data_name = read_filename.get()
save_file = save_filename.get()
#1---拡張子取得
save_file_extension = save_file + str(variable.get())
excel_data = openpyxl.load_workbook(data_name)
excel_sheetname = excel_data.sheetnames
open_file = open(save_file_extension,mode = "w",encoding = "utf-8")
for i,name in enumerate(excel_sheetname):
open_file.write(str(i)+','+name+"\n")
open_file.close()
root = tk.Tk()
root.title("Auto")
root.geometry("640x395")
button1 = tk.Button(text="Start", command = start_thread_sheet)
lb_filename = tk.Label(text='Reading File Name')
read_filename = tk.Entry(width = 50, bg = "#FAF8EC")
lb_savename = tk.Label(text='Save File Name')
save_filename = tk.Entry(width = 50, bg = "#FAF8EC")
option = [".bat", ".csv", ".xlsx", ".txt"]
variable = tk.StringVar()
combo=ttk.Combobox(root,values=option,textvariable=variable,state="readonly")
combo.bind("<<ComboboxSelected>>")
lb_filename.grid(column=0,row=0)
read_filename.grid(column=1,row=0)
lb_savename.grid(column=0,row=1)
save_filename.grid(column=1,row=1)
button1.grid(column=3,row=2)
combo.grid(column=2,row=1)
root.mainloop()
上記は任意のエクセルファイルをEntry(Reading File Name)に入力してそのエクセルのSheet名を取得して任意のファイルに出力するものです。
このプログラムの肝である、プルダウンで選択した文字列(拡張子)を取得する場合は「variable.get()」になります。
#1---拡張子取得
save_file_extension = save_file + str(variable.get())