Python:Matplotlib 按钮不工作(在第二个图中)

Python: Matplotlib Button not working (in the second plot)

我正在使用 matplotlib 按钮创建另一个带有按钮的绘图。但是,第二个图中的第二个按钮不起作用。谁能看看我的代码并给我一些帮助?

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import tkinter as tk
from matplotlib.widgets import Button

def next1(event):
    print("you clicked here")

def next0(event):

    # plt.close('all')
    fig, ax = plt.subplots()
    rects = ax.bar(range(10), 20*np.random.rand(10))

    axnext1 = plt.axes([0.11, 0.05, 0.05, 0.0375])
    bnext1 = Button(axnext1, 'Next2')
    print(bnext1.label)
    bnext1.on_clicked(next1)
    plt.show()

fig, ax = plt.subplots()
rects = ax.bar(range(10), 20*np.random.rand(10))

axnext0 = plt.axes([0.11, 0.05, 0.05, 0.0375])
bnext0 = Button(axnext0, 'Next1')
print(bnext0.label)
bnext0.on_clicked(next0)

plt.show()

This figure shows the problem I had. The second figure is created by the button in the first image. While the button in the second figure does not work.

问题似乎是因为您将第二个按钮分配给了局部变量(函数内部),并且 python 在完成函数后删除了该对象。必须将按钮分配给全局变量 - 以便在完成功能后保留它。

def next0(event):
    global bnext1

    # ... code ...

顺便说一句:

点击第一个按钮后显示信息(不是错误消息)

QCoreApplication::exec: The event loop is already running 

因为第二个 window 试图创建新的 event loopevent loop 已经存在 - 由第一个 window 创建。

要解决此问题,您可以在 non-blocking 模式下 运行 第二 window。

def next0(event):
    global bnext1

    # ... code ...

    plt.show(block=False)