Python 如何使用滑块小部件的值?

Python 如何使用滑块小部件的值?,python,matplotlib,slider,Python,Matplotlib,Slider,我想使用matplotlib滑块小部件让用户选择一个值。我想添加一个按钮,用户可以点击他们一旦完成。此按钮仅关闭matplotlib窗口。然后我想写一个代码,在窗口关闭之前使用滑块值。 我想出了以下脚本: import matplotlib.pyplot as plt from matplotlib.widgets import Slider, Button #Create a slider axcolor = 'lightgoldenrodyellow' axg = plt.axes([0.

我想使用matplotlib滑块小部件让用户选择一个值。我想添加一个按钮,用户可以点击他们一旦完成。此按钮仅关闭matplotlib窗口。然后我想写一个代码,在窗口关闭之前使用滑块值。 我想出了以下脚本:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

#Create a slider
axcolor = 'lightgoldenrodyellow'
axg = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
gstart = 0
gend = 100
valinit = 50
valstep = 1
sg = Slider(axg, 'g', gstart, gend, valinit=valinit, valstep=valstep)

def update(event):
    pass

sg.on_changed(update)

#Create quit button
quitax = plt.axes([0.8, 0.025, 0.1, 0.04])
quit_button = Button(quitax, 'Quit', color=axcolor, hovercolor='0.975')

def quit(event):
    plt.close()

quit_button.on_clicked(quit)

while True:
    if len(plt.get_fignums()) == 0:
        break

#Here I planned to add code using the slider position before the user 
#clicked on the quit button
g = sg.val

我希望底部的“while循环”将暂停程序的执行,直到matplotlib窗口关闭。然后,一旦关闭,执行将继续,我将能够使用滑块值来实现我的目的。不幸的是,这不起作用。知道如何解决这个问题吗?

我不知道为什么您的代码在我的系统上的行为与在您的系统上的不同,但一个可能的解决方案是将滑块的更新值存储在全局变量中:

slider_value = valinit

def update(val):
    global slider_value
    slider_value = val

sg.on_changed(update)

我忘了提到我最初在Spyder(Anaconda)中运行过这段代码。我重新运行了代码,将“while”循环替换为
plt.show()
,正如上面Diziet在PyCharm中建议的那样。工作完全如预期。因此,这一定是环境问题或Spyder中的某些错误设置造成的。
我应该在发布问题之前测试一下,并为徒劳地拖延了社区的注意力而道歉。新手的错误。

如果我用
plt.show()
替换你的
循环,你的代码对我来说很好。此调用被阻塞,将等待窗口关闭,然后执行其余代码。@Diziet:谢谢,但我已经尝试过了。对于您建议的替换,无论单击“退出”之前滑块的位置如何,脚本执行后g的值为50(初始值)。奇怪的是,这对我来说很好。