使用Tkinter按钮无法停止片刻

时间:2019-12-26 10:27:25

标签: python python-3.x python-2.7 tkinter

我有两个按钮,分别是开始停止,当我单击开始按钮时,我要经历一会儿,但是当我想要停止它时, Tkinter窗口被阻止,由于整个窗口被阻止,我无法点击停止按钮

下面是我的代码:

s = 1
def Start():
   while(s==1):
      #do something
def Stop():
   global s
   s = 0

btn_Start= Button(root, text = 'Start',width=9, height=2, command = Start).place(x=2,y=2)
btn_Stop = Button(root, text = 'Stop',width=9, height=2, command = Stop).place(x=2,y=42)

有人知道我该怎么停吗?

编辑:-------- 还是一样的错误

enter image description here

1 个答案:

答案 0 :(得分:1)

如果要在活动窗口中同时运行该功能,则必须使用线程方法将其连接。

该线程方法创建一个线程,该线程创建您的程序的单独执行。

这是您的解决方案,

import tkinter
import threading
from tkinter import *

root = Tk()

s = 1

def Start():
    while(s==1):
        print(s)
        #do something


def thread():
    global t
    t = threading.Thread(target = Start)
    t.start()

def Stop():
   global s
   s = 0
   t.join()
   print("Stopped")

btn_Start= Button(root, text = 'Start',width=9, height=2, command = thread).place(x=2,y=2)
btn_Stop = Button(root, text = 'Stop',width=9, height=2, command = Stop).place(x=2,y=42)

在上述程序中,Start()被分配为线程。因此,当按下Start按钮时,命令的thread()将通过执行Start()函数来创建新线程。 当Stop()函数被调用时,t.join()将把该线程包括在您的Stop()函数执行中。

在这里您可以找到线程模块文档, https://docs.python.org/3/library/threading.html#module-threading