定时关机应用V2.1

# 在ShutDown_2.0的基础上,作了如下改进:
# 1) 修正了默认模式无法选择其他时间的bug,还增加了2.5小时和3小时两个选项;
# 2)自定义模式将计时单位从“秒”改为“分钟”,倒计时显示也优化为“小时:分钟:秒”;
# 3)增加了第三种“定时模式”'''

# 在ShutDown_2.0的基础上,作了如下改进:
# 1)默认模式增加了2.5小时和3小时“两个选项;
# 2)自定义模式将计时单位从“秒”改为“分钟”,倒计时显示也优化为“小时:分钟:秒”;
# 3)增加了第三种“定时模式”'''import datetime
import tkinter as tk
from tkinter import ttk
from threading import Thread
import time
import osdef selected_time(selected_value):match selected_value:case '0.5小时':return 1800case '1小时':return 3600case '1.5小时':return 5400case '2小时':return 7200case '2.5小时':return 9000case '3小时':return 10800class ShutdownApp:def __init__(self, root):self.time_left = 0self.time_left2 = 0self.root = rootself.root.title("定时关机应用V2.1")self.root.resizable(0, 0)screenwidth = self.root.winfo_screenwidth()screenheight = self.root.winfo_screenheight()width = 600height = 200size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)self.root.geometry(size_geo)self.root.iconphoto(False, tk.PhotoImage(file="C:\\Users\\wokao\\Documents\\MyPythonCode\\ShutDown_v2.0\\""icon.png"))self.root["background"] = "#8DB6CD"self.notebook = tk.ttk.Notebook(self.root)self.framework1 = tk.Frame()self.framework2 = tk.Frame()self.framework3 = tk.Frame()self.notebook.add(self.framework1, text='默认模式')self.notebook.add(self.framework2, text='自定义模式')self.notebook.add(self.framework3, text='定时模式')self.notebook.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)# 选项卡1的界面tk.Label(self.framework1, text="选择倒计时关机时长:").pack()self.cbox = ttk.Combobox(self.framework1)self.cbox['value'] = ('0.5小时', '1小时', '1.5小时', '2小时', '2.5小时', '3小时')self.cbox.current(1)self.selected_value = self.cbox.get()self.cbox.pack()self.start_button = tk.Button(self.framework1, text="开始", command=self.start_timer)self.start_button.pack()self.cancel_button = tk.Button(self.framework1, text="取消关机", state='disabled', command=self.cancel_timer)self.cancel_button.pack()self.timer_label = tk.Label(self.framework1, text="", bg="#8DB6CD")self.timer_label.pack()# 选项卡2的界面tk.Label(self.framework2, text="输入倒计时关机时长(分钟):").pack()self.time_entry2 = tk.Entry(self.framework2)self.time_entry2.pack()self.start_button2 = tk.Button(self.framework2, text="开始", command=self.start_timer2)self.start_button2.pack()self.cancel_button2 = tk.Button(self.framework2, text="取消关机", state='disabled', command=self.cancel_timer2)self.cancel_button2.pack()self.timer_label2 = tk.Label(self.framework2, text="", bg="#8DB6CD")self.timer_label2.pack()self.timer_thread = Noneself.running = False# 选项卡3的界面self.Label3_text = tk.Label(self.framework3, text='现在时间:')self.Label3_text.grid(padx=100, row=0, column=0)self.Label3 = tk.Label(self.framework3,text=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())),font=("黑体", 15), fg="white", bg="#8DB6CD")self.Label3.grid(row=0, column=3)self.Label3.after(1000, self.display_timer3)self.l1 = tk.Label(self.framework3, text="小时")self.l1.grid(row=1, column=0)self.input_hour = tk.Entry(self.framework3, bd=0, width=10)self.input_hour.grid(row=1, column=3)self.l2 = tk.Label(self.framework3, text="分钟")self.l2.grid(row=2, column=0)self.input_minute = tk.Entry(self.framework3, bd=0, width=10)self.input_minute.grid(row=2, column=3)self.start_button3 = tk.Button(self.framework3, text="确定", command=self.start_timer3)self.start_button3.grid(row=3, column=0)self.cancel_button3 = tk.Button(self.framework3, text="取消", command=self.cancel_timer3)self.cancel_button3.grid(row=3, column=3)# 选项卡1的功能实现def start_timer(self):try:self.time_left = selected_time(self.cbox.get())except ValueError:self.timer_label.config(text="请选择关机倒计时时长!")returnself.notebook.tab(1, state='disabled')self.notebook.tab(2, state='disabled')self.running = Trueself.start_button.config(state='disabled')self.cancel_button.config(state='normal')self.timer_thread = Thread(target=self.run_timer)self.timer_thread.start()def run_timer(self):timer = datetime.timedelta(seconds=self.time_left)while timer > datetime.timedelta(seconds=0) and self.running:self.timer_label.config(text=f"关机倒计时: {str(timer)} ", font=("黑体", 45), fg="white", bg="#8DB6CD")time.sleep(1)timer -= datetime.timedelta(seconds=1)self.timer_label.config(text="")if self.running:os.system("shutdown /s /t 1")  # 在Windows上执行关机命令def cancel_timer(self):self.running = Falseself.start_button.config(state='normal')self.cancel_button.config(state='disabled')self.timer_label.config(text="已取消关机")self.notebook.tab(1, state='normal')self.notebook.tab(2, state='normal')# 选项卡2的功能实现def start_timer2(self):try:self.time_left2 = int(self.time_entry2.get())except ValueError:self.timer_label2.config(text="请输入有效的数字!")returnself.notebook.tab(0, state='disabled')self.notebook.tab(2, state='disabled')self.running = Trueself.start_button2.config(state='disabled')self.cancel_button2.config(state='normal')self.timer_thread = Thread(target=self.run_timer2)self.timer_thread.start()def run_timer2(self):timer = datetime.timedelta(seconds=60 * self.time_left2)while timer > datetime.timedelta(seconds=0) and self.running:self.timer_label2.config(text=f"关机倒计时: {str(timer)} ", font=("黑体", 45), fg="white", bg="#8DB6CD")time.sleep(1)timer -= datetime.timedelta(seconds=1)self.timer_label2.config(text="")if self.running:os.system("shutdown /s /t 1")  # 在Windows上执行关机命令def cancel_timer2(self):self.running = Falseself.start_button2.config(state='normal')self.cancel_button2.config(state='disabled')self.timer_label2.config(text="已取消关机")self.notebook.tab(0, state='normal')self.notebook.tab(2, state='normal')# 选项卡3的功能实现def display_timer3(self):currentTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))self.Label3.config(text=currentTime)self.root.update()self.Label3.after(1000, self.display_timer3)def start_timer3(self):try:hour = int(self.input_hour.get())minute = int(self.input_minute.get())except ValueError:returncur_time = datetime.datetime.now()cur_time_hour = cur_time.hourcur_time_minute = cur_time.minutehours = ((hour + (minute / 60)) - (cur_time_hour + cur_time_minute / 60))seconds = hours * 60 * 60os.system('shutdown -s -t %d' % seconds)self.notebook.tab(0, state='disabled')self.notebook.tab(1, state='disabled')self.start_button3.config(state='disabled')self.cancel_button3.config(state='normal')def cancel_timer3(self):self.start_button3.config(state='normal')self.cancel_button3.config(state='disabled')self.notebook.tab(0, state='normal')self.notebook.tab(1, state='normal')try:os.system("shutdown -a")except Exception:returnif __name__ == "__main__":ui = tk.Tk()app = ShutdownApp(ui)ui.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415942.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来能源转型之路:2023年第十三届中国国际储能大会启示录

在2023年第十三届中国国际储能大会上,全球各地的能源专家、学者和企业代表齐聚一堂,共同探讨了储能技术在推动能源转型中的重要作用。对于我们普通人来说,从这场大会中可以学到什么呢? 一、储能技术是未来能源发展的关键 随着可再…

Red Hat Enterprise Linux 7.9 安装图解

引导和开始安装 选择倒计时结束前,通过键盘上下键选择下图框选项,启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致,引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的,如图所示。若手动调…

Go后端开发 -- 反射reflect 结构体标签

Go后端开发 – 反射reflect && 结构体标签 文章目录 Go后端开发 -- 反射reflect && 结构体标签一、反射reflect1.编程语言中反射的概念2.interface 和反射3.变量内置的pair结构4.reflect的基本功能TypeOf和ValueOf5.从relfect.Value中获取接口interface的信息6…

微服务研发时,多个人共同调试一个服务,在nacos会启动多个实例,导致请求服务接口时在你和别人之间来回轮询问题处理

1、问题描述 当我们有两个研发同时在调试一个微服务模块时,你和对方本地都会启动服务,这就导致在nacos会同时注册两个实例。默认情况下请求这个服务,具体处理请求的程序会在你和对方之间来回轮询,即一下你的服务一下对方的服务。…

erlang (OS 操作模块)学习笔记

cmd: env: 返回所有环境变量的列表。 每个环境变量都表示为元组 {VarName,Value},其中 VarName 是 变量和 Value 其值。 例: {VarName,Value} {"ERLANG_HOME","C:\\Program Files\\erl-24.3.4.2\\bin\\erl-24.3.4.2"}…

将 SQL Server 2022 数据库备份到 MinIO

Microsoft 在将 S3 连接器和 Polybase 添加到 SQL Server 2022 时取得了重大飞跃。因此,企业可以利用他们保存到对象存储中的大量数据,并使用它来丰富 SQL Server 表。他们还可以利用对象存储来备份 SQL Server,这是开放性和云原生灵活性的又…

uniapp打ipa包在ios上运行上传图片提示 打包时未添加Gallery模块

你们好,我是金金金。 场景 uniapp编写好的app云打包后在ios手机上安装成功,app内有一个上传图片的功能,点击上传图片时出现如上图问题 排查 百度了一下问题,也看了下uniapp的官方文档 uniapp官网文档:避免App隐私合规…

实验三 Oracle数据库的创建和管理

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解数独

46 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 排列问题与组合问题的不同之处就在于,没有startIndex,同时需要设置一个used数组…

AI驱动下的算力浪潮,中国稳居全球第二

AI大模型的发展引发了对算力的进一步需求。中国信通院发布的《中国综合算力指数(2023年)》显示,当前算力规模中,通用算力占比达74%,智能算力规模同比增加60%至25%。大模型对人工智能算力的重要推动作用。 如今&#x…

ChatGPT提示词保姆级教程

现在越来越多提示词教程,本文列个清单,方便以后整理,不定期更新,欢迎关注留言! 后续更新欢迎关注 提示词(prompt)出来后,被称为一个新的岗位诞生,面向提示词工程师。 …

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?-UFS篇

如果说SSD是赛道上的超级跑车,那UFS更像是专为智能汽车定制的高性能轻量化赛车。UFS采用串行接口技术,像是闪电侠一样,将数据传输的速度推向新高,大幅缩短了系统启动时间和应用程序加载时间,这对追求即时反应的ADAS系统…