Home > Mobile >  How to make tkinter delay a specific function without running another function?
How to make tkinter delay a specific function without running another function?

Time:10-24

I am aware of the .after method, but it requires a function to use. I tried making a function that does nothing, but it just freezes the screen. Is there a way to make it so it doens't modify the gui when doing .after? (I tried with a function that did, and it worked)

   def doNothing():
    return "nothing"


def init_timer(time=25):
    global minutes
    global onBreak
    minutes = 0
    onBreak = False
    while True:
        pomodoro()


def pomodoro():
    global pomodoros
    if pomodoros < 4:
        setTimer(25)
        while not(isTimerDone):
            print("Timer In Progress")
        setTimer(5)
        while not(isTimerDone):

        pomodoros  = 1
    else:
        setTimer(30)




def timerDone():
    global onBreak
    global isTimerDone
    isTimerDone = True
    reminderTitle.config(text="The timer is done!")
    onBreak = not(onBreak)
    if onBreak:
        reminderTitle.config(text="Go on break!")
    else:
        reminderTitle.config(text="Get to work!")
    timer.config(text="Completed")
    playsound(f'{os.getcwd()}/Audio/notification.mp3')


def setTimer(mins=25):
    global isTimerDone
    isTimerDone = False
    timer.config(text="In Progress")
    window.after(mins * 60 * 1000, timerDone)

CodePudding user response:

This problem occurs when you use while function . So, in order to make your program work properly you have to use .after only , not inside a while function .Here is an example that you could base on to improve your program : import tkinter as tk

root = tk.Tk()
clock = tk.Label(root)

k = 0

def timing(time):
    '''time in minutes'''
    global k
    k = time
    clock.configure(text = 'you still have : '   str(time)   ' minutes')
    def change_value():
        global k
        if k >  0:
            k = k-1
            clock.configure(text = 'you still have : '   str(k) ' minutes')
            root.after(60000,change_value)
        else : 
            clock.configure(text = "it's over")
  
    
    root.after(60000,change_value)


timing(5)

clock.pack()
root.mainloop()
  • Related