python - 如何用 tkinter 制作计时器?
问题描述
我正在尝试制作一个计时器来关闭运行 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()
解决方案
为了将您的hrs
(用户选择的分钟数)添加到您的命令中,您可以简单地将其添加到现有的字符串命令中,+
或者使用format()
我在解决方案中显示的方法。此外,当您运行命令时sudo
需要输入密码,要自动执行此操作,您可以使用 -S 参数使 sudo 从 STDIN 读取密码,here "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)
推荐阅读
- c++ - 如何修复 ifstream 语法错误,以及 C++ 中可能的数据转换错误丢失?
- jquery - 并排动画两个元素不起作用(淡入,淡出,动画)
- python - 根据来自另一个数据帧的行中的匹配值排除数据帧中的行
- swift - 奇怪的 SCNGeometrySource 数据
- mongodb - Syntax of $or in mongoDB
- html - 将图像和列对齐到中心的问题
- amazon-dynamodb - dynamoose 的复杂查询
- javascript - 为什么 Intellisense 为常量提供 Json?
- d3.js - 如何在 d3.js 中放置堆叠条形图的图例
- coinbase-api - wallet:buys:create 支持购买 USDC 吗?