如何使用matplotlib中的按钮退出while循环



我正试图找出如何通过按钮摆脱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()

您只处理单个线程,因此只能在调用结束后与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()

最新更新