1. ホーム
  2. python

[解決済み] tkinter pythonでボタンの背景色を点滅させる方法

2022-02-16 02:44:14

質問

2つのボタンと1つのエントリーがあるシンプルなウィンドウがあります。エントリーからのテキストがボタン2のテキストと同じ場合、ボタン2を点滅させたいのです。after関数を使ってみましたが、うまくいきません。色を変えることはできますが、点滅させる方法がわかりません。 以下は私のコードです。

import tkinter as tk

text = ""
def gettext():
    text = entry.get()
    if text == button2['text']:
        button2.config(background='red')
        
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
button1 = tk.Button(root, text="Text", command=gettext)
button1.pack(side="bottom", padx=20, pady=20)
button2 = tk.Button(root, text="Flashing")
button2.pack(side="bottom", padx=20, pady=20)
root.mainloop()

解決方法は?

これを試してみてください。

import tkinter as tk

text = ""
def gettext(*args):
    text = entry.get()
    if text == button2.cget("text"):
        # Change the button's bg to red
        button2.config(background="red")
        # After 100ms reset the variable's bg
        button2.after(100, lambda: button2.config(background="#f0f0ed"))
        # After 100 more milliseconds call `gettext` again
        button2.after(200, gettext)

root = tk.Tk()
# Create a StringVar variable
variable = tk.StringVar(root)
# Trace the variable
variable.trace("w", gettext)
# Attach it to the entry
entry = tk.Entry(root, textvariable=variable)
entry.pack()
button2 = tk.Button(root, text="Flashing")
button2.pack()
root.mainloop()

ボタンを1つ削除して StringVar 代わりに(テストをしやすくするために)。ロジックは非常にシンプルです。

  • ボタンのbgを赤に変更する
  • 100ミリ秒待って、ボタンのbgをリセットする
  • さらに100ミリ秒後に、この関数を再度実行する