from tkinter import *
import tkinter as tk
import time
#1
pencere = tk.Tk()
pencere.geometry('1920x1080')
pencere.title("Latin")
pencere['bg']='black'
#2
yazi = Text(pencere)
yazi.pack()
yazi.config(bg="black",fg="green",font=("COURIER",20))
yazi.place(x=450,y=0 , width = 1080, height = 680)
#3
def yukle():
while True:
time.sleep(0.2)
nokta = """."""
yazi.insert(tk.END, nokta)
#4
buton2=Button(pencere,text="{Yükle} ..", command=yukle)
buton2.pack()
buton2.config(bg="black",fg="red" ,font=("COURIER",20))
buton2.place(x=450,y=700)
#5
pencere.mainloop()
bu kodları kullandığım dosyamda “buton2” adı altında tanımlanmış butonumun kullanımından sonra ;
{yazi=Text(pencere)} tanımlısında 0.2 sn’de birer
{nokta = “.”} görmek isterken
birkaç sn beklemenin sonucu olarak “yanıt vermiyor” cevabını alınıyorum.
belirttiğim gibi , while döngüsü ile buton2’nin 0.2sn’de bir yazi text’ime “.” eklemesini istiyorum.
yukle
fonksiyonu çağrılınca sonsuz bir döngü oluşuyor, bu nedenle tkinter’de herhangi bir işlem yapılamıyor. Tıpkı aşağıdaki örnekte olduğu gibi:
import tkinter as tk
def f():
n = 0
while True:
print(n)
n += 1
root = tk.Tk()
button = tk.Button(
master=root,
text="Click Me",
command=f
)
button.pack()
root.mainloop()
Birbirini engellemeyen işlemler oluşturmak için farklı yollar izleyebilirsiniz:
- threading kullanabilirsiniz:
import threading
import tkinter as tk
def f():
n = 0
while True:
print(n)
n += 1
root = tk.Tk()
button = tk.Button(
master=root,
text="Click Me",
command=threading.Thread(target=f, daemon=True).start
)
button.pack()
root.mainloop()
- asyncio kullanabilirsiniz:
import asyncio
import tkinter as tk
async def mainloop(root):
while True:
try:
root.update()
await asyncio.sleep(0)
except tk.TclError:
return
async def f():
n = 0
while True:
print(n)
n += 1
await asyncio.sleep(0)
root = tk.Tk()
button = tk.Button(
master=root,
text="Click Me",
command=lambda: asyncio.create_task(f())
)
button.pack()
asyncio.run(mainloop(root))
1 Beğeni