Gerekli Kütüphaneleri Projeye Dahil etmek
Time, Threading ve Tkinter
from tkinter import *
import time
import threading
Sınıfımızı Oluşturalım
import time
import threading
from tkinter import *
class Main:
def __init__(self, master):
self.master = master
master.title('Zamanlayıcı')
self.secondL = Label(master, text='saniye:')
self.secondL.grid(row = 0, column= 0, pady=10, padx=10)
self.secondE = Entry(master)
self.secondE.grid(row = 0, column=1, padx=10)
self.startButton = Button(master, text='başlat', command=self.threadStartTimer)
self.startButton.grid(row=1, column=1, sticky = EW, padx=10)
self.stopButton = Button(master, text='durdur', command=self.threadStopTimer)
self.stopButton.grid(row=2, column=1, sticky = EW, padx=10)
self.stopButton['state'] = 'disabled'
Burada uygulamamıza Tkinter kullanarak arayüz ekledik. Bir labelimiz, bir entrymiz, iki tane de butonumuz var. Butonlarımızdan bir tanesi geri sayımı başlatmak, bir tanesi de geri sayımı durdurmak için var oldular. Yalnız durdur butonumuzu başlangıçta kullanışsız hale getiriyoruz. Onu sadece geri sayım sırasında aktifleştireceğiz.
Method: Başlama
def threadStartTimer(self):
self.startedThread = threading.Thread(target=self.startTimer)
self.startedThread.start()
def startTimer(self):
self.deadCounting = False
second = int(self.secondE.get())
now = time.time()
future = now + second
while time.time() <= future and not self.deadCounting:
self.startButton['state'] = 'disabled'
self.stopButton['state'] = 'active'
self.secondE.delete(0, END)
self.secondE.insert(0, int(future - time.time()))
if int(future - time.time()) == 0:
self.startButton['state'] = 'active'
self.stopButton['state'] = 'disabled'
time.sleep(.1)
Thread kullanmamızın asıl amacı ikinci methodda yazdığımız while döngüsü çalışırken bir yandan da Tkinter penceremizin güncellenmesi. Eğer Thread kullanmazsak Tkinter penceremez while döngüsü bitene kadar yenilenmeyecek çünkü sırasıyla yaptırıyor olacaktık. İkinci metodda self.deadCounting boolean'ı, geri sayımı durdurmak için orada.
Method: Durdurma
def threadStopTimer(self):
self.deadCounting = True
self.stopButton['state'] = 'disabled'
self.startButton['state'] = 'active'
self.deadCounting'i True yaparak Thread'da çalışan while döngüsünü kırdık. Geri sayımı bitirdiğimizden dolayı durdurma butonumuzu deaktif, başlat butonunu da aktif hale getiriyoruz.
Kodun Son Hali
import time
import threading
from tkinter import *
class Main:
def __init__(self, master):
self.master = master
master.title('Zamanlayıcı')
self.secondL = Label(master, text='saniye:')
self.secondL.grid(row = 0, column= 0, pady=10, padx=10)
self.secondE = Entry(master)
self.secondE.grid(row = 0, column=1, padx=10)
self.startButton = Button(master, text='başlat', command=self.threadStartTimer)
self.startButton.grid(row=1, column=1, sticky = EW, padx=10)
self.stopButton = Button(master, text='durdur', command=self.threadStopTimer)
self.stopButton.grid(row=2, column=1, sticky = EW, padx=10)
self.stopButton['state'] = 'disabled'
self.adButton = Button(master, text='kodlardan bir blog')
self.adButton.grid(row=3, column=1, sticky= EW, padx=10,pady=10)
def threadStartTimer(self):
self.startedThread = threading.Thread(target=self.startTimer)
self.startedThread.start()
def startTimer(self):
self.deadCounting = False
second = int(self.secondE.get())
now = time.time()
future = now + second
while time.time() <= future and not self.deadCounting:
self.startButton['state'] = 'disabled'
self.stopButton['state'] = 'active'
self.secondE.delete(0, END)
self.secondE.insert(0, int(future - time.time()))
if int(future - time.time()) == 0:
self.startButton['state'] = 'active'
self.stopButton['state'] = 'disabled'
time.sleep(.1)
def threadStopTimer(self):
self.deadCounting = True
self.stopButton['state'] = 'disabled'
self.startButton['state'] = 'active'
root = Tk()
main = Main(root)
root.mainloop()
0 Yorumlar