用按钮中断tkinter GUI中的循环。

2024-09-27 00:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个计时器应用程序,它遇到了很多困难,但最早的一个是创建一个可以通过按下按钮来打破的循环。我已经研究过了,我的研究表明我应该使用线程,但是我不知道它是如何工作的。在

于是,我决定尝试在调用键盘中断时创建一个异常,然后创建一个调用同一中断的按钮。但是,当我使用ctrl-c时,我当前的代码拒绝中断

我的示例代码如下所示

from Tkinter import *
from sys import exit

class Timer:
    def __init__(self, master):
         buttonstart = Button(master, text = "Start", fg = "blue", command = self.start)
         buttonstart.grid(row = 1, column = 0)

         buttonquit = Button(master, text = "Quit", fg = "blue", command= quit)
         buttonquit.grid(row = 1, column = 2)

        global timertext
        timertext = DoubleVar()
        timertext.set(0)
        display = Label(master, textvariable = timertext)
        display.grid(row = 0, column = 0)
        timertext.set(timertext)

    def timerlogic(self):
        pass

    def pause(self):
        pass

    def start(self):
        global timertext
        try:
            while True:
                #do things
       except keyboardInterrupt:
            print "Interrupted"

def lap(self):
    pass

root = Tk()
app = Timer(root)
root.mainloop()
root.destroy()

基本上,我不认为我的代码是可行的,但我不知道如何编辑它,使循环我可以中断需要。在


Tags: 代码fromimportselfmasterdefcolumnpass
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:21

你把一些变量设为真或假。另外,while循环会中断Tkinter循环,因此在while循环退出之前,Tkinter什么都不会做。改用Tkinter的after函数。在

from Tkinter import *
##from sys import exit

class Timer:
    def __init__(self, master):
        self.master=master
        buttonstart = Button(master, text = "Start", fg = "blue", command = self.start)
        buttonstart.grid(row = 1, column = 0)

        buttonquit = Button(master, text = "Quit", fg = "blue", command=self.quitit)
        buttonquit.grid(row = 1, column = 2)

        self.timertext = DoubleVar()
        self.timertext.set(0)
        display = Label(master, textvariable = self.timertext)
        display.grid(row = 0, column = 0)
##        timertext.set(timertext)  ## Huh!!
        self.timeit=False

    def increment_timer(self):
        ctr=int(self.timertext.get())
        self.timertext.set(ctr+1)
        if self.timeit:
            self.master.after(500, self.increment_timer)

    def start(self):
        self.timeit=True
        self.increment_timer()

    def quitit(self):
        self.timeit=False

root = Tk()
app = Timer(root)
root.mainloop()

相关问题 更多 >

    热门问题