Как сделать таймер с ткинтером? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь сделать таймер, который выключает мой компьютер под управлением Linux. Для выбора времени я использую спинбокс. Таким образом, идея состоит в том, чтобы выбрать количество времени в spinbox, а затем добавить к команде sudo shutdown -P + 15 мин (например, пример).

До сих пор он просто отключается, и я не могу сделать простой способ сделать это.

программа таймера

from tkinter import *
import os
import time

def shutdown():
    hrs = spin1.get()
    command1 = ('sudo shutdown -P')
    #sum1 = command1 + hrs
    os.system('sudo shutdown -P') + ('hrs')
    print(os.system)

def cancel():
    command = ('sudo shutdown -c')
    os.system('sudo shutdown -c')
    print(command)



'''def hrs():
    spn1 = spin1.get()
    dsp1 = spn1
    lbltime ['text'] = dsp1'''

entry_width = 2
win = Tk()

spin1 = IntVar()
spn = IntVar()

win.title('SHUTDOWN')
win.geometry('300x250+300+150')
lbl = Label(win, text='SET YOUR SHUTDOWN')
lbl.place(x=80, y=30)


spin1 = Spinbox(win, from_=00, to=23, font=('arial',26,'bold'), width= entry_width, textvariable=spin1)
spin1.insert(0, '00')
spin1.place(x=130, y=60)

setup = Button(win, text='SET TIMER', font=('arial',16,'bold'), command=lambda :shutdown())
setup.place(x=90, y=130)

cnc = Button(win, text='CANCEL', font=('verdana',10, 'bold'),command= lambda :cancel())
cnc.place(x=120, y=180)

win.mainloop()

1 Ответ

0 голосов
/ 24 января 2019

Чтобы добавить hrs (минуты, выбранные пользователем) к вашей команде, вы можете либо просто добавить ее в существующую строковую команду, используя +, либо используя format(), как я показал в своем решении. Также при запуске команд с sudo вам нужно ввести пароль, чтобы сделать это автоматически, вы можете использовать аргумент -S, который заставляет sudo читать пароль из STDIN, здесь "mypassword".

def shutdown():
    hrs = spin1.get()
    sd_command = 'echo mypassword | sudo -S shutdown -P +' + hrs # both will work
    sd_command = 'echo mypassword | sudo -S shutdown -P +{}'.format(hrs)
    os.system(command)
    print(command)

def cancel():
    cancel_command = 'echo mypassword | sudo -S shutdown -c'
    os.system(cancel_command)
    print(cancel_command)

Если вы хотите добавить сообщение о расписании выключения, вам нужно добавить еще одну метку, здесь shutdown_schedule, которая будет отображать содержимое var_schedule, которое является строковой переменной tkinter, которое будет изменено, когда пользователь запланирует или отменит выключение.

def shutdown():
    hrs = spin1.get()

    sd_time = time.strftime("%H:%M", time.localtime(time.time() + 60*int(hrs)))
    var_schedule.set('Shutdown scheduled for {}'.format(sd_time))

    sd_command = 'echo mypassword | sudo -S shutdown -P +' + hrs # both will work
    sd_command = 'echo mypassword | sudo -S shutdown -P +{}'.format(hrs)
    os.system(command)
    print(command)

def cancel():
    var_schedule.set('Shutdown not scheduled yet')

    cancel_command = 'echo mypassword | sudo -S shutdown -c'
       os.system(cancel_command)
    print(cancel_command)

var_schedule = StringVar()
var_schedule.set('Shutdown not scheduled yet')

shutdown_schedule = Label(win, textvariable=var_schedule)
shutdown_schedule.place(x=130, y=30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...