5

Tkinterのビューテンウィジェットの背景色を変更するために、マウスオーバーイベントを取得しようとしています。テキストでは機能するが、色では失敗する簡単なコードをオンラインで入手しました。ここにあります:

from Tkinter import *
root - Tk()

b = Button(root, text='foo')
b.pack()

def enterB(event):
    b.configure(text='bar', background='red')

def leaveB(event):
    b.configure(text='foo')

b.bind('<Enter>', enterB)
b.bind('<Leave>', leaveB)

root.mainloop()

ボタンの上にマウスを置くと、テキストが「バー」に変わりますが、背景色は灰色のままです。マウスがボタンの上の領域を離れると、背景色が赤に変わり、テキストが「foo」に変わります。これは、起こるべきことの反対です。

LeaveB関数のb.configureステートメントにbackground='blue'を入れ、残りを同じままにすると、ボタンを離れるとボタンは青のままになり、赤になることはありません。

誰かが何が起こっているのか教えてもらえますか?

ありがとう。

4

3 に答える 3

3

まず、2行目のタイプミスだと思います。root = Tk()


そのプログラムは、ボタンからマウスを削除しても背景が残るという行為を除いて、私にとっては適切に機能しますredleaveBこれは、次のように関数をわずかに変更することで変更できます。

def leaveB(event):
    b.configure(text="foo", background="SystemButtonFace")

"SystemButtonFace"Windows を使用している場合のデフォルトのボタン フェースの色はどこですか

于 2012-11-18T13:04:35.113 に答える
2

私は同じ問題を抱えていました(実際、マウスを離さない限り、クリック後にボタンの色が変わらないことに悩まされていました)。解決策は、アクティブな背景色を設定することでした。私の理解では、これはマウスがボタンの上にあるときに表示される色です(http://www.tutorialspoint.com/python/tk_button.htmを参照)

だから私がしたことは:

def enterB(event):
   b.configure(text='bar', background='red')
   b.configure(activebackground='red');

このようにして、マウスが上にあるときにボタンがすでに赤くなります。もちろん、ボタンを離れたら、 leaveB 関数で色をリセットして灰色に戻す必要があります。

于 2013-02-18T17:20:55.720 に答える
0

Mac を使用している場合、ボタンの背景色やレリーフ スタイルを変更することはできません。ただし、ハイライトの背景色は変更できます。これは mac での tk の制限であるため、代わりに wx をお勧めします。

于 2014-02-07T00:07:03.750 に答える