0

Tkinter を使用して Python にループ関数があり、Tkinter を使用してボタンを押しても終了しません。ボタンで指定された新機能を継続するが、旧機能も継続する

コードは次のとおりです(一部):

def countdown(self):

        if self.seconds <= 0:
            if self.minutes > 0:
                self.seconds += 59
                self.minutes -= 1
            elif self.minutes == 0:
                if self.hours != 0:
                    self.minutes += 59
                    self.seconds += 59
                    self.hours -= 1
                else:
                    self.timerLab.configure(text="Times Up!")

        self.timerLab.configure(text="Time Remaining: %d:%d:%d " % (self.hours,self.minutes,self.seconds))
        self.seconds -= 1
        self.after(1000, self.countdown)

別のボタンが押されたら、どうすればこれを終了できますか。現在のプロセスを終了させるものはありますか?

4

4 に答える 4

0

変数を設定するボタンがあります。カウントダウン関数にその変数をチェックさせ、変数が特定の値に設定されている場合にのみ、それ自体を再スケジュールします。

このようなもの:

def __init__(self):
    ...
    self.running = False

    start_button = Button(..., self.start, ...)
    quit_button = Button(..., self.stop, ...)

def start(self):
    self.running = True;
    self.countdown()

def stop(self):
    self.running = False;

def countdown(self):
    ...
    if (self.running):
        self.after(1000, self.countdown)
于 2013-04-01T10:45:59.303 に答える
0

Ctrl+C で停止しても問題ない場合は、これを実装する方法がいくつかあります。私はそれらの専門家ではありませんが、簡単なGoogle検索から、これに沿ったものがうまくいくように見えます:

import signal 
import sys
import subprocess

def signal_handler(signal, frame):
    print 'You pressed Ctrl+C!'
    sys.exit(0)

ESC で終了するこのソリューションもあります (変更するには、27 を別のキーの番号に変更するだけです)。

import msvcrt

while 1:
    print 'Testing..'
    # body of the loop ...
    if msvcrt.kbhit():
    if ord(msvcrt.getch()) == 27:
        break

それが役立つことを願っています。

于 2013-04-01T04:46:43.423 に答える