我尝试使用“开始”按钮启动while循环,然后使用“停止”按钮停止它,但是我找不到可行的方法。
我在Python 3.7中使用了tkinker
我试过了,但是没用
有人为我提供了一些修复程序或有用的提示吗?
import time
import sys
from tkinter import *
x = 1
fenster = Tk()
fenster.title("test")
fenster.geometry("600x300")
def start():
start1()
time.sleep(5)
startini()
def start1():
x = 0
def startini():
if x < 1:
while x < 1:
print(x)
timer.sleep(5)
elif x > 0:
print("stop")
btstart = Button(fenster, text="Start", command=start)
btstart.pack()
def stop():
stop1()
time.sleep(5)
startini()
def stop1():
x = 1
btstop = Button(fenster, text="Stop", command=stop)
btstop.pack()
mainloop()
答案 0 :(得分:1)
您可能可以通过after
获得所需的功能。您的问题是while循环阻止您的程序继续运行:
import time
import sys
from tkinter import *
x = 1
fenster = Tk()
fenster.title("test")
fenster.geometry("600x300")
def start():
global x
x= 0
myloop()
def myloop():
if x < 1:
print(x)
fenster.after(2000,myloop)
elif x > 0:
print("stop")
def stop():
global x
x=1
btstart = Button(fenster, text="Start", command=start)
btstart.pack()
btstop = Button(fenster, text="Stop", command=stop)
btstop.pack()
mainloop()
答案 1 :(得分:0)
请看看python namespaces的工作方式。
在您的函数中,您显然打算引用在函数外部创建的x
。在这种情况下,您需要声明global.
,例如:
def start1():
global x
x = 0
和:
def startini():
global x
if x < 1:
while x < 1:
print(x)
time.sleep(5)
elif x > 0:
print("stop")
,等等,在使用x
的所有函数中。现在循环将起作用,但是您会发现按下开始按钮后,无法通过按下停止按钮来停止循环,因为GUI将被冻结。循环将永远持续下去。
要停止循环,您需要threading
。请参阅this question以了解原因(该问题用于python2.7,但原因相同)。
在您的情况下,应该足以在脚本的开头添加import threading
并以这种方式编辑start()
函数:
def start():
start1()
time.sleep(5)
thr = threading.Thread(target=startini)
thr.start()