【Python】Exception in Tkinter callback …… TypeError: startswith first arg must be str or a tuple of str, not Entry の原因と対処法

目次

使用環境

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()で取得した後に処理を行うことが大切です。

ここまでお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次