【问题标题】:How to get out of a while loop using a button in matplotlib如何使用 matplotlib 中的按钮退出 while 循环
【发布时间】:2022-10-08 15:15:39
【问题描述】:

我试图弄清楚如何使用按钮退出while循环,仅此而已。

这应该在我的脑海中起作用,但它所做的只是第一次单击它时,while 循环开始,然后再单击几下,程序就会崩溃。

我认为错误出现在“bprev.on_clicked(turn_off)”代码中,它要么不能按我想要的方式工作,要么可能被“跳过”

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.widgets import Button
    import time

    onoff = True
    fig, ax = plt.subplots()
    axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
    bprev = Button(axprev, 'On/Off')

    def turn_on(val):
        global onoff
        onoff = True
        main()

    def main(): 
        global onoff

        def turn_off(val):
            global onoff       
            onoff = False       
        
        while onoff: #main loop
            bprev.on_clicked(turn_off) 
            print("It works ? Probably not.")
            time.sleep(0.4)        

    bprev.on_clicked(turn_on) 
    plt.show()

【问题讨论】:

    标签: python loops button while-loop break


    【解决方案1】:

    您只在单个线程上工作,因此您只能在通话结束后与 matplot 的视图进行交互。但这永远不会发生,因为它正在运行无限循环。简单的解决方案是使用多线程。

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.widgets import Button
    import time
    from threading import Thread
    
    onoff = True
    fig, ax = plt.subplots()
    axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
    bprev = Button(axprev, 'On/Off')
    
    
    def toggle(val):
        global onoff
        onoff = not onoff
        if(onoff == True): Thread(target=main).start()
    
    
    def main():
        global onoff    
            
        while onoff: #main loop
            print("It works ? Yes.")
            time.sleep(0.4)        
    
    bprev.on_clicked(toggle) 
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2015-01-18
      • 1970-01-01
      • 2022-07-12
      • 2011-11-07
      • 2023-04-08
      相关资源
      最近更新 更多