私は各セルにマーカーを付けて少し3x3ボードを描こうとします。 このマーカーは、セルをマウスでタッチしたときにのみ表示されます。 これは時々、二回、一回3 3回に動作します - しかし、その後イベントループ「火災」無限(常に同じイベント)...おそらくこれは、self.itemconfigure書に貼りれcanvas.itemconfigの結果が無限のイベントループになる
import tkinter as tk
cellsize = 50
class Board(tk.Canvas):
def __init__(self):
tk.Canvas.__init__(self)
for row in range(3):
for column in range(3):
ulx, uly = column*cellsize, row*cellsize
lrx, lry = ulx+cellsize, uly+cellsize
_cell = self.create_rectangle(ulx, uly, lrx, lry,
fill='green')
_right = self.create_rectangle(ulx+39, uly+20, lrx-1, lry-20,
fill='red',
state='hidden')
self.tag_bind(_cell, '<Enter>',
lambda e, r=_right: self.show_pos('on', r))
self.tag_bind(_cell, '<Leave>',
lambda e, r=_right: self.show_pos('off', r))
def show_pos(self, onoff, right):
print('{} {}'.format(onoff, right))
if onoff == 'on':
self.itemconfig(right, state='normal')
elif onoff == 'off':
self.itemconfig(right, state='hidden')
root = tk.Tk()
Board().grid()
root.mainloop()
、なぜなら他のこと(ステータス行の更新など)を行うことは、期待通りに機能します。
解決方法はありますか?具体的には
:事前に
Thxを
マーヴィン
追加=を埋める「にitemconfigを変更する状態= ...」
を」に固執するようです... show_pos 『期待どおりに動作 だから、タイトルは
でなければなりません。「『で』無限イベントループでcanvas.itemconfig(状態=』 ...」結果」
"update"は状態変更後に呼び出されます(Tkinter.py、def _cnfmerge)。状態の変更により状態がさらに変化します。入力/離脱の代わりにマウス位置計算を使用してバインディングを達成しようとすると、良いことがあります。あなたの答えは – R4PH43L