tkinterのLabelのテキストを変更する方法に関する備忘録。
Labelのテキストを変更する方法は簡単で、tk.Label
で生成したLabelインスタンスの text
属性を変更することで、テキストを変更することができる。
具体的には
label["text"] = "変更後のテキスト"
といった形で変更可能。
tkinterでLabelのテキストを変更するサンプル
サンプルコードを下に記載する。
import tkinter as tk from datetime import datetime class App: def __init__(self, root): self.root = root root.title("Label text change sample") root.geometry("250x100") self.datetime_label = tk.Label(root, text="") self.datetime_label.pack() tk.Button(text="Display datetime", width=20, command=self.display_datetime).pack() root.mainloop() def display_datetime(self): self.datetime_label["text"] = datetime.now() def main(): root = tk.Tk() app = App(root) app.root.mainloop() if __name__ == "__main__": main()
このコードを実行して、Display datetime
ボタンを押すと、現在時刻がLabel上に表示される。
なお、こちらのコードはGitHubにも上げている。
Labelのテキストを変更する際に気をつけたいところ
これは個人的に一瞬ハマりかけたところなのだが、tkinterではLabelなどの生成時にメソッドチェーン的な形でpack
や grid
をつなげて書くことができる。
例えば下記のような形。
(上に貼ったサンプルコードの一部を引用している)
tk.Button(text="Display datetime", width=20, command=self.display_datetime).pack()
このように1行で書けるのは便利なので、ついついなんでもこう書いてしまいがちだが、このpack
や grid
などの返り値は NoneType
であることに注意したい。
つまり、下記のように書くとエラーとなる。
(これも上のコード内の引用)
self.datetime_label = tk.Label(root, text="").pack()
こうやって書いてしまうと、self.datetime_label
には LabelのインスタンスではなくNoneType
が入るため、このままアプリを起動してボタンを押すと、
TypeError: 'NoneType' object does not support item assignment
というエラーが出てしまう。
一瞬なぜエラーになったのか分からなかったが、落ち着いて考えてみればNoneTypeが代入されてしまっているだけということに気づいた。
ついついメソッドチェーンで繋げて書くのは便利なので使いがちだが、こういう細かいところで気をつけていかねばと思った次第である。