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

matplotlib小部件:通过单击不同的按钮创建不同的滑块,matplotlib,button,widget,slider,Matplotlib,Button,Widget,Slider,我想创建一个通过单击某个按钮显示的滑块。如果我点击另一个按钮,我希望这个滑块消失,并立即在同一位置创建一个新的滑块。 例如: 我有两个按钮:按钮1和按钮2 如果我单击按钮1,滑块1将在xy=0.5,0.5处创建,具有特定的值范围a到b。 如果我现在单击按钮2,slider1将消失,slider2将在xy=0.5,0.5处创建,并具有不同的值范围c到b 我已经写了一个脚本,所以我可以创建这些不同的滑块,但我有删除的问题。例如,如果我在按钮1上单击两次,则另一个滑块1将出现在第一个打印的滑块1的顶部

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

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

好的,我们开始: 此代码首先定义设置为不可见的3个不同滑块(f010、f015、f022)和3个不同按钮(WR10、WR15、WR22)。Tje滑块均位于同一xy位置。 然后,每个按钮都应调用特定的滑块,例如按钮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()

我想我已经告诉过你如何做到这一点了。这在多大程度上不起作用?对不起,我不明白你的答案。你能给我举个例子吗?一次创建所有滑块。把你不需要的东西看不见。在按钮回调中,根据需要设置滑块的可见性(
ax\u slider.set\u visible(True)
False
)。好了,现在我明白了。是的,好主意,我试过了,但是当我回调并为某个滑块设置可见性“True”时,所有其他滑块也会打印出来,尽管我只是将某个滑块设置为可见。我认为问题隐藏在定义中:我在同一位置定义了所有滑块,并将可见性设置为False。当我现在进行回调时,不仅会打印一个滑块,还会打印所有滑块(它们会相互覆盖)。我不知道如何解决这个问题。现在这似乎是一个有用的问题。为什么不显示重现此问题的代码(),以便人们可以帮助解决此问题?