gpt4 book ai didi

python - 使 Matplotlib 按钮回调立即生效,而不是在将鼠标移开按钮后生效

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:50 24 4
gpt4 key购买 nike

我正在尝试使用 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)

这会产生如下图:

enter image description here

我已经点击了除一个之外的所有按钮。然而,在使用此 GUI 时,我注意到新标签只有在我将鼠标移离按钮后才可见,而我希望更改立即发生。有什么想法可以实现这一点吗?

最佳答案

您只需添加对 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)

关于python - 使 Matplotlib 按钮回调立即生效,而不是在将鼠标移开按钮后生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com