目次
使用環境
Windows 10 Pro(バージョン20H2)
経緯
Pythonでtkinterを使用しているときに、
次のようなエラーが発生しました。
Exception in Tkinter callback
TypeError: startswith first arg must be str or a tuple of str, not Entry
プログラム内で、Entryウィジェットから取得した値を処理しようとしたところで出たエラーです。
エラーの原因
このエラーは、tkinterのEntryオブジェクトそのものに対して文字列操作をしようとしたために発生しています。
本来はEntryオブジェクトから文字列を取り出し、その文字列に対して処理を行う必要があります。
正しい対処方法
Entryウィジェットに入力された値を使用するには、必ず.get()
を使って文字列を取り出す必要があります。
正しいコード例
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
entry_name = tk.Entry(frame)
entry_name.pack()
def on_button_click():
file_name = entry_name.get()
if file_name.startswith("test"):
print("ファイル名は'test'で始まっています")
button = tk.Button(frame, text="確認", command=on_button_click)
button.pack()
root.mainloop()
このように、Entryから直接データを取るのではなく、.get()
を通して取り出した文字列に対して処理を行う必要があります。
まとめ
tkinterで発生するTypeError: startswith first arg must be str or a tuple of str, not Entry
というエラーは、Entryオブジェクト自体ではなく、その中の文字列データを使うことで回避できます。
プログラムが長くなっていても、フレーム内の値を使うときには、必ず.get()
で取得した後に処理を行うことが大切です。
ここまでお読みいただきありがとうございました。