Tkinter'da bekleme

Merhaba.

Tkinter kullanırken iki işlem arasında bekleyecekseniz pencere.after kullanmanız daha doğru olur, aksi takdirde arayüzün donması ile alakalı problemler yaşarsınız:

import tkinter as tk
import time

def komut():
    lb["text"] = 99
    pencere.after(4000, lambda: lb.config(text = 78)) # 4000 milisaniye sonra ikinci argüman olan fonksiyon çalışacak

pencere = tk.Tk()

lb = tk.Label(text=33)
lb.place(x=20, y=20)
b = tk.Button(text='bas', command=lambda: pencere.after(3000, komut)) # 3000 milisaniye sonra ikinci argüman olan fonksiyon çalışacak
b.place(x=50, y=50)

pencere.mainloop()

Tabii kodumuzu bu şekilde dağıtıp okunaklılığı azaltmak istemiyorsak ufak hilelere başvurabiliriz:

import tkinter as tk
import time

def wait(f):
    def start():
        g = f()
        def repeater():
            try:
                pencere.after(next(g) * 1000, repeater)
            except StopIteration:
                pass
        repeater()
    return start

@wait
def komut():
    yield 3 # üç saniye bekliyor
    lb["text"] = 99
    yield 4 # dört saniye bekliyor
    lb["text"] = 78

pencere = tk.Tk()

lb = tk.Label(text=33)
lb.place(x=20, y=20)
b = tk.Button(text='bas', command=komut)
b.place(x=50, y=50)

pencere.mainloop()
4 Beğeni