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