`import tkinter as tk
import tkinter.font as tkFont
import time
from tkinter import *
def navbar(self, page):
timerBtn = tk.Button(self.master, text='Waktu kalau bisa jangan sampai LEWAT YGY,Ingat waktu ingat mati :)',
command=lambda: timers(self, page))
timerBtn.place(x=0, y=550, width=999, height=50)
def timers(self, page):
if page != 'Timer':
self.master.destroy()
root = tk.Tk()
app = Timer(root)
class Timer:
def __init__(self, master):
self.master = master
self.master.title("PEA.NET Billing dibuat oleh Fikri Khoiruddin GAMTENK SEDUNIAA")
self.master.geometry("999x600")
self.place()
def place(self):
self.hoursLabel = tk.Label(self.master, text='Jam')
self.hoursLabel.place(x=220,y=200)
self.hoursEntry = tk.Entry(self.master)
self.hoursEntry.place(x=200, y=200, width=20)
self.hoursUpArrow = tk.Button(self.master, text="\N{UPWARDS BLACK ARROW}",
command=lambda: self.change('hours', 'Up'))
self.hoursUpArrow.place(x=201, y= 170)
self.hoursDownArrow = tk.Button(self.master, text="\N{DOWNWARDS BLACK ARROW}",
command=lambda: self.change('hours', 'Down'))
self.hoursDownArrow.place(x=201, y= 225)
self.minsLabel = tk.Label(self.master, text='Menit')
self.minsLabel.place(x=520,y=200)
self.minsEntry = tk.Entry(self.master)
self.minsEntry.place(x=500,y= 200, width=20)
self.minsUpArrow = tk.Button(self.master, text="\N{UPWARDS BLACK ARROW}",
command=lambda: self.change('mins', 'Up'))
self.minsUpArrow.place(x=501, y=170)
self.minsDownArrow = tk.Button(self.master, text="\N{DOWNWARDS BLACK ARROW}",
command=lambda: self.change('mins', 'Down'))
self.minsDownArrow.place(x=501, y= 225)
self.secondsLabel = tk.Label(self.master, text='Detik')
self.secondsLabel.place(x=820,y=200)
self.secondsEntry = tk.Entry(self.master)
self.secondsEntry.place(x=800,y= 200, width=20)
self.secondsUpArrow = tk.Button(self.master, text="\N{UPWARDS BLACK ARROW}",
command=lambda: self.change('sec', 'Up'))
self.secondsUpArrow.place(x=801, y= 170)
self.secondsDownArrow = tk.Button(self.master, text="\N{DOWNWARDS BLACK ARROW}",
command=lambda: self.change('sec', 'Down'))
self.secondsDownArrow.place(x=801, y=225)
self.cancelButton = tk.Button(self.master, text='Kembali', command=self.cancel)
self.cancelButton.place(x=150,y=400)
self.startButton = tk.Button(self.master, text= 'MULAI WAKTUNYA', command=self.start)
self.startButton.place(x=750,y=400)
navbar(self, 'Timer')
def change(self,time, change):
changeable = 0
if time == 'hours':
changeable = self.hoursEntry.get()
elif time == 'mins':
changeable = self.minsEntry.get()
elif time == 'sec':
changeable = self.secondsEntry.get()
if changeable == '':
changeable = 0
else:
changeable = int(changeable)
if time == 'hours':
if change == 'Up':
changeable += 1
else:
if changeable > 0:
changeable -= 1
self.hoursEntry.delete(0,tk.END)
self.hoursEntry.insert(0,str(changeable))
elif time == 'mins':
if change == 'Up' and changeable < 60:
changeable += 1
else:
if changeable > 0:
changeable -= 1
self.minsEntry.delete(0,tk.END)
self.minsEntry.insert(0,str(changeable))
elif time == 'sec':
if change == 'Up' and changeable < 60:
changeable += 1
else:
if changeable > 0:
changeable -= 1
self.secondsEntry.delete(0,tk.END)
self.secondsEntry.insert(0,str(changeable))
def cancel(self):
self.on = False
self.TimeLabel.place_forget()
self.place()
def start(self):
self.hours = self.hoursEntry.get()
self.mins = self.minsEntry.get()
self.seconds = self.secondsEntry.get()
if self.hours == '':
self.hours = '00'
if self.mins == '':
self.mins = '00'
if self.seconds == '':
self.seconds = '00'
self.hours = int(self.hours)
self.mins = int(self.mins)
self.seconds = int(self.seconds)
self.hoursLabel.place_forget()
self.hoursEntry.place_forget()
self.hoursUpArrow.place_forget()
self.hoursDownArrow.place_forget()
self.minsLabel.place_forget()
self.minsEntry.place_forget()
self.minsUpArrow.place_forget()
self.minsDownArrow.place_forget()
self.secondsLabel.place_forget()
self.secondsEntry.place_forget()
self.secondsUpArrow.place_forget()
self.secondsDownArrow.place_forget()
fontStyle = tkFont.Font(family="Lucida Grande", size=60)
time_string = f'{self.hours:2d}:{self.mins:02d}:{self.seconds:02d}'
self.TimeLabel = tk.Label(self.master, text=time_string, font=fontStyle)
self.TimeLabel.place(x=335, y=200)
self.on = True
self.master.after(1000, self.countdown) # Start countdown in 1 second.
def countdown(self):
self.seconds -= 1
if self.seconds <= 0:
if self.mins > 0:
self.seconds = 60
self.mins -= 1
else:
if self.hours >= 1:
self.mins = 59
self.seconds = 60
self.hours -= 1
else:
self.on = False
time_string = f'{self.hours:2d}:{self.mins:02d}:{self.seconds:02d}'
self.TimeLabel.config(text=time_string)
if self.on: # Not finished?
self.master.after(1000, self.countdown) # Call again in 1 second.
root = tk.Tk()
app = Timer(root)
root.mainloop()
`
i want to add a little bit feature to the code which is the pc is auto logging off when the timer is end, i already tried using
os.system('shutdown /l')
and it does logging off but,its logging off when i start the code,so maybe the problem is i dont know where to put the logging off syntax inside the code,it would help me to learn a lot with code if you guys answer the question,tysm`
>Solution :
Try this:
import tkinter as tk
import tkinter.font as tkFont
import time
from tkinter import *
import os # Import the os module for shutdown
def navbar(self, page):
timerBtn = tk.Button(self.master, text='Waktu kalau bisa jangan sampai LEWAT YGY,Ingat waktu ingat mati :)',
command=lambda: timers(self, page))
timerBtn.place(x=0, y=550, width=999, height=50)
def timers(self, page):
if page != 'Timer':
self.master.destroy()
root = tk.Tk()
app = Timer(root)
class Timer:
def __init__(self, master):
self.master = master
self.master.title("PEA.NET Billing dibuat oleh Fikri Khoiruddin GAMTENK SEDUNIAA")
self.master.geometry("999x600")
self.place()
# ... Rest of your code ...
def countdown(self):
self.seconds -= 1
if self.seconds <= 0:
if self.mins > 0:
self.seconds = 60
self.mins -= 1
else:
if self.hours >= 1:
self.mins = 59
self.seconds = 60
self.hours -= 1
else:
self.on = False
time_string = f'{self.hours:2d}:{self.mins:02d}:{self.seconds:02d}'
self.TimeLabel.config(text=time_string)
if not self.on: # Timer finished?
os.system('shutdown /l') # Log off when timer finishes
else:
self.master.after(1000, self.countdown) # Call again in 1 second.
root = tk.Tk()
app = Timer(root)
root.mainloop()