Python 我试着用一个开始按钮开始一个while循环,然后用一个停止按钮停止它,但我找不到一个可行的方法

Python 我试着用一个开始按钮开始一个while循环,然后用一个停止按钮停止它,但我找不到一个可行的方法,python,python-3.x,Python,Python 3.x,我试着用一个开始按钮开始一个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() t

我试着用一个开始按钮开始一个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()

导入时间
导入系统
从tkinter进口*
x=1
芬斯特=Tk()
fenster.标题(“测试”)
芬斯特几何学(“600x300”)
def start():
start1()
时间。睡眠(5)
斯塔蒂尼()
def start1():
x=0
def startini():
如果x<1:
当x<1时:
打印(x)
计时器。睡眠(5)
elif x>0:
打印(“停止”)
btstart=按钮(fenster,text=“Start”,command=Start)
btstart.pack()
def stop():
stop1()
时间。睡眠(5)
斯塔蒂尼()
def stop1():
x=1
btstop=按钮(fenster,text=“Stop”,command=Stop)
btstop.pack()
mainloop()

您可能可以在
之后使用
获得所需的功能。您的问题是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()
导入时间
导入系统
从tkinter进口*
x=1
芬斯特=Tk()
fenster.标题(“测试”)
芬斯特几何学(“600x300”)
def start():
全球x
x=0
myloop()
def myloop():
如果x<1:
打印(x)
芬斯特之后(2000年,myloop)
elif x>0:
打印(“停止”)
def stop():
全球x
x=1
btstart=按钮(fenster,text=“Start”,command=Start)
btstart.pack()
btstop=按钮(fenster,text=“Stop”,command=Stop)
btstop.pack()
mainloop()
参考x 请看一下工作原理

在函数中,您显然希望引用在函数外部创建的
x
。在这种情况下,您需要将其声明为全局。
例如:

def start1():
    global x
    x = 0
以及:


“行不通”有点通用。你应该更具体一些。当我在Tkinter回调回溯(最后一次调用)中按start
0 Exception时:文件“C:\Python\lib\Tkinter_init_uu2;.py”,第1705行,在调用返回self.func(*args)文件“C:\cygwin64\home\hello.py”,第54行,在停止startini()文件“C:\cygwin64\home\hello.py”,第41行,在startini timer.sleep中(5) NameError:name'timer'未在您的代码中定义。
计时器。sleep(5)
。应该是
时间。sleep(5)
def startini():
    global x  
    if x < 1:
        while x < 1:
            print(x)
            time.sleep(5)
    elif x > 0:
        print("stop")
def start():
    start1()
    time.sleep(5)
    thr = threading.Thread(target=startini)
    thr.start()