当前位置: 首页 > 面试题库 >

如何在运行后停止tkinter?

阎功
2023-03-14
问题内容

我在停止“供稿”时遇到问题;cancel参数似乎对after方法没有任何影响。尽管“进纸停止”已打印到控制台。

我尝试使用一个按钮将启动供稿,而另一个按钮将停止供稿。

from Tkinter import Tk, Button
import random

    def goodbye_world():
        print "Stopping Feed"
        button.configure(text = "Start Feed", command=hello_world)
        print_sleep(True)

    def hello_world():
        print "Starting Feed"
        button.configure(text = "Stop Feed", command=goodbye_world)
        print_sleep()

    def print_sleep(cancel=False):
        if cancel==False:
            foo = random.randint(4000,7500)
            print "Sleeping", foo
            root.after(foo,print_sleep)
        else:
            print "Feed Stopped"


    root = Tk()
    button = Button(root, text="Start Feed", command=hello_world)

    button.pack()


    root.mainloop()

随着输出:

Starting Feed
Sleeping 4195
Sleeping 4634
Sleeping 6591
Sleeping 7074
Stopping Feed
Sleeping 4908
Feed Stopped
Sleeping 6892
Sleeping 5605

问题答案:

问题是,即使你打电话print_sleepTrue停止循环,已经有等待消防挂起的工作。按下停止按钮不会触发新的作业,但是旧的作业仍然存在,并且当它自己调用时,它将传入False,这将导致循环继续。

您需要取消待处理的作业,以使其不运行。例如:

def cancel():
    if self._job is not None:
        root.after_cancel(self._job)
        self._job = None

def goodbye_world():
    print "Stopping Feed"
    cancel()
    button.configure(text = "Start Feed", command=hello_world)

def hello_world():
    print "Starting Feed"
    button.configure(text = "Stop Feed", command=goodbye_world)
    print_sleep()

def print_sleep():
    foo = random.randint(4000,7500)
    print "Sleeping", foo
    self._job = root.after(foo,print_sleep)

注意:请确保在self._job某处进行初始化,例如在应用程序对象的构造函数中进行初始化。



 类似资料:
  • 问题内容: 我正在尝试制作一个简单的计时器,该计时器在指定的秒数后发出提示音。我设法使其正常工作,但是TimerTask在蜂鸣声后继续运行。现在我停止执行吗?这是我的代码: 问题答案: 您需要通过调用以下方法来取消计时器 这将取消任务,因此可以执行以下操作:

  • Firebase在大约一个小时后停止连接到数据库并停止工作。如果我退出并重新登录,它的工作原理很好。这是使用谷歌和Facebook登录(目前为Facebook)。 我已经登录了,大约一个小时后,出现了这个: W/PersistentConnection:pc_0-提供的身份验证凭据无效。这通常表示FirebaseApp实例未正确初始化。确保你的谷歌服务。json文件具有正确的firebase_ur

  • return执行之后,下面的语句不是都会忽略不执行的吗,为什么id重复之后,依然要输入姓名年龄住址,输入确实只返回数字1了,有没有什么方法能够在id重复时不用再输入姓名年龄住址 //1.添加学生 id需要唯一 有没有什么方法能够在id重复时不用再输入姓名年龄住址

  • 我写了一个程序在IDLE令牌化文本文件,它开始令牌349文本文件!我怎样才能阻止它?如何停止正在运行的Python程序?

  • 问题内容: 我用IDLE编写了一个程序来标记文本文件,然后开始标记349个文本文件!我该如何阻止它?如何停止正在运行的Python程序? 问题答案: 要停止程序,只需按 + 。

  • 问题内容: 我从Linux Shell 连接到。我时不时地运行一个太大的查询。它可以打印,我已经知道这不是我的意思。我想停止查询。 击中(几次)会完全杀死并把我带回外壳,因此我必须重新连接。 是否可以在不杀死自己的情况下停止查询? 问题答案: