Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how to add auto logging off when the timer is up with this code?

`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`

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>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()
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading