我正在尝试使用Matplotlib制作Tic Tac Toe游戏的GUI。到目前为止,我已经制作了一系列按钮,点击时将标签更改为“X”:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def callback(event, button):
print button
button.label.set_text("X")
fig, axarr = plt.subplots(3,3, figsize=(6,6))
buttons = [[None for _ in range(3)] for _ in range(3)]
for i in range(3):
for j in range(3):
buttons[i][j] = Button(ax=axarr[i][j], label="")
buttons[i][j].on_clicked(lambda event, i=i, j=j: callback(event, buttons[i][j]))
axarr[i][j].set_aspect('equal')
fig.tight_layout(h_pad=0, w_pad=0)
plt.show(block=False)
这会产生如下情节:
https://docs.botframework.com/en-us/skype/chat/#navtitle
我已经点击了除一个按钮之外的所有按钮。然而,当我使用这个GUI时,我注意到新标签只有在我将鼠标从按钮上移开后才会显示,而我希望更改立即发生。任何想法如何实现这一目标?
答案 0 :(得分:1)
您只需要向draw_idle
添加一个调用,该调用要求GUI在下次方便时重新绘制窗口(然后重新绘制图形)。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def callback(event, button):
print(button)
button.label.set_text("X")
if event.inaxes is not None:
event.inaxes.figure.canvas.draw_idle()
fig, axarr = plt.subplots(3,3, figsize=(6,6))
buttons = [[None for _ in range(3)] for _ in range(3)]
for i in range(3):
for j in range(3):
buttons[i][j] = Button(ax=axarr[i][j], label="")
buttons[i][j].on_clicked(lambda event, i=i, j=j: callback(event, buttons[i][j]))
axarr[i][j].set_aspect('equal')
fig.tight_layout(h_pad=0, w_pad=0)
plt.show(block=False)