matplotlib小部件:通过单击不同的按钮创建不同的滑块



我想创建一个通过单击某个按钮显示的滑块。如果我单击另一个按钮,我希望这个滑块消失,并立即在同一位置创建一个新的滑块。例如:我有两个按钮:按钮1和按钮2如果我单击按钮1,则在xy=0.5,0.5处创建滑块1,其值范围为a到b。如果我现在点击按钮2,滑块1消失,滑块2在xy=0.5,0.5处创建,具有不同的值范围c直到b。

我已经写了一个脚本,所以我可以创建这些不同的滑块,但我有删除的问题。例如,如果我在按钮1上单击2次,则另一个滑块1会出现在第一个打印的滑块1的顶部。你能帮我吗?

好了,开始吧:该代码首先定义了3个不同的滑块(f010、f015、f022(和3个不同按钮(WR10、WR15、WR22(,它们被设置为不可见。Tje滑块都处于相同的xy位置。然后,每个按钮都应该调用一个特定的滑块,例如button WR10-->滑块f010。问题是,如果单击一个按钮,所有3个滑块都会被调用并相互覆盖。

from __future__ import print_function
from numpy import pi, sin
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
from matplotlib.patches import Ellipse
from scipy.optimize import fsolve
#Plot
axis_color = 'lightgoldenrodyellow'
fig = plt.figure(figsize=(20,10))
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0.25, bottom=0.35)
#Define Sliders and set all invisible
f010_slider_ax = fig.add_axes([0.25, 0.25, 0.65, 0.03], axisbg=axis_color)
f010_slider = Slider(f010_slider_ax, 'f0_10 [GHz]', 750.0, 1100.0, valinit=750.0)
f010_slider_ax.set_visible(False)
f015_slider_ax = fig.add_axes([0.25, 0.25, 0.65, 0.03], axisbg=axis_color)
f015_slider = Slider(f015_slider_ax, 'f0_15 [GHz]', 500.0, 750.0, valinit=500.0)
f015_slider_ax.set_visible(False)
f022_slider_ax = fig.add_axes([0.25, 0.25, 0.65, 0.03], axisbg=axis_color)
f022_slider = Slider(f022_slider_ax, 'f0_22 [GHz]', 340.0, 500.0, valinit=340.0)
f022_slider_ax.set_visible(False)

#Define WR buttons
WR10_button_ax = fig.add_axes([0.025, 0.9, 0.05, 0.05])
WR10_button = Button(WR10_button_ax, 'WR1.0:', color=axis_color, hovercolor='0.975')
WR15_button_ax = fig.add_axes([0.025, 0.8, 0.05, 0.05])
WR15_button = Button(WR15_button_ax, 'WR1.5:', color=axis_color, hovercolor='0.975')
WR22_button_ax = fig.add_axes([0.025, 0.7, 0.05, 0.05])
WR22_button = Button(WR22_button_ax, 'WR2.2:', color=axis_color, hovercolor='0.975')

#Define Event on Buttons
def WR10_button_on_clicked(mouse_event): 
f010_slider_ax.set_visible(True)    
WR10_button.on_clicked(WR10_button_on_clicked)
def WR15_button_on_clicked(mouse_event):
f015_slider_ax.set_visible(True)
WR15_button.on_clicked(WR15_button_on_clicked)
def WR22_button_on_clicked(mouse_event):
f022_slider_ax.set_visible(True)
WR22_button.on_clicked(WR22_button_on_clicked)

plt.show()