电脑定时关机应用

这是一个Python应用。家里卧室装了新电视,HDMI连接笔记本追剧还是很愉快的。可是经常睡着,自然忘了关机。搜了一大圈,都是用命令行或者bat解决。商店里的应用也不好用,有些还收费。于是萌生了自己写一个定时关机应用的想法。利用Notebook实现“默认模式”和“自定义模式”选项卡,如图所示。最后一张图是素材。

import datetime
import tkinter as tk
from tkinter import ttk
from threading import Thread
import time
import osclass ShutdownApp:def __init__(self, root):self.time_left = Noneself.root = rootself.root.title("定时关机应用")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/Desktop/icon.png'))self.root["background"] = "#8DB6CD"self.notebook = tk.ttk.Notebook(self.root)self.framework1 = tk.Frame()self.framework2 = tk.Frame()self.notebook.add(self.framework1, text='默认模式')self.notebook.add(self.framework2, text='自定义模式')self.notebook.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)# 选项卡1的界面tk.Label(self.framework1, text="选择关机时长:").pack()cbox = ttk.Combobox(self.framework1)cbox['value'] = ('0.5小时', '1小时', '1.5小时', '2小时')cbox.current(1)self.selected_value = cbox.get()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_left2 = self.time_entry2.get()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# 选项卡1的功能实现def selected_time(self, selected_value):match selected_value:case '0.5小时':self.time_left = 1800case '1小时':self.time_left = 3600case '1.5小时':self.time_left = 5400case '2小时':self.time_left = 7200def start_timer(self):try:self.selected_time(self.selected_value)except ValueError:self.timer_label.config(text="请选择关机倒计时时长!")returnself.notebook.tab(1, 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):while self.time_left > 0 and self.running:timer = str(datetime.timedelta(seconds=int(self.time_left)))self.timer_label.config(text=f"关机倒计时: {timer} ", font=("黑体", 45), fg="white", bg="#8DB6CD")time.sleep(1)self.time_left -= 1self.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')# 选项卡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.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):while self.time_left2 > 0 and self.running:self.timer_label2.config(text=f"关机倒计时: {self.time_left2} 秒", font=("黑体", 45),fg="white", bg="#8DB6CD")time.sleep(1)self.time_left2 -= 1self.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')if __name__ == "__main__":ui = tk.Tk()app = ShutdownApp(ui)ui.mainloop()

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

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

相关文章

监控平台zabbix介绍与部署

1. 完整的项目 业务架构:客户端 -> 防火墙 -> 负载均衡(四层、七层)-> Web缓存/应用 -> 业务逻辑(动态应用)-> 数据缓存 -> 数据持久 运维架构:运维客户端 -> 堡垒机/跳板机&#x…

TLC Nand Flash 存储单元的读取原理

我们知道Nand Flash使用浮栅晶体管作为存储单元(memory cell)来存储数据,浮栅晶体管物理结构如图1所示: 图1 浮栅晶体管 对于普通的晶体管(去掉浮栅晶体管中的浮栅层,floating gate)&#xff0…

基于Docker的Nginx的安装与配置

基于Docker的Nginx的安装与配置 1 为Nginx创建一个容器1.1 学习docker run1.2 通过docker run为Nginx创建并启动一个容器 2 配置Nginx2.1 学习docker的bind mount技术2.2 在Nginx容器中找到想修改的文件所在的目录2.2.1 认识nginx.conf文件2.2.2 访问Nginx服务,默认…

【MATLAB】VMD_LSTM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 变分模态分解(Variational Mode Decomposition,VMD)和LSTM(Long Short-Term Memory)神经网络结合的算法是一种用于处理时间序列…

超详细的嵌入式cJSON使用注意事项,持续补充中......

文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么? cJSON开源库地址: cJSON 一、堆内存不足 1.1 问…

ssm基于Web的课堂管理系统设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

【GitHub项目推荐--开源的坦克大战】【转载】

坦克大战当年红遍大江南北,很多和我一样的九零后应该都有着对这个游戏的记忆。现在显示器分辨率越来越高,使用矢量图来实现像素风格游戏,可以获得非常高的展现质量。 这个项目是作者肥超花了很长时间折腾的复刻版本,所有元素都使…

余弦相似度的计算以及公式

公式: 思想:余弦相似度的思想是通过计算两个向量之间的余弦值来衡量它们的相似程度。如果两个向量之间的夹角越小,它们的余弦值就越接近1,也就意味着它们越相似。而如果它们的夹角越大,余弦值就越接近0,也就…

ES的文档操作

一,DSL语句 1,新增文档: 2,查询文档和删除文档: ,3修改文档 修改有两种方式: 全量修改:直接覆盖原来的文档 增量修改:修改文档中的部分字段 全量修改 全量修改是覆盖原来的文档…

八:分布式锁

1、为什么要使用分布式锁 锁是多线程代码中的概念,只有多任务访问同一个互斥的共享资源时才需要锁。单机应用开发时一般使用synchronized或lock。多线程的运行都是在同一个JVM之下。应用是分布式集群,属于多JVM的工作环境,JVM之间已经无法通过…

Error: L6218E: Undefined symbol 系列错误汇总 (referred from main.o)

传送门 错误1: Undefined symbol(referred from main.o)错误2:Undefined_symbol _use_two_region memory 错误1: Undefined symbol(referred from main.o) Cube_GPIO\Cube_GPIO.axf: Error: L6218E: Undefined symbol LED_GPIO_Init (referr…

操作系统详解(5.1)——信号(Signal)的相关题目

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 题目第一问第二问第三问 题目…

FGSM方法生成交通信号牌的对抗图像样本

背景: 生成对抗样本,即扰动图像,让原本是“停车”的信号牌识别为“禁止驶入” 实验准备 模型:找一个训练好的,识别交通信号牌的CNN模型,灰度图像 模型地址:GitHub - Daulettulegenov/TSR_CNN:…

Wargames与bash知识17

Wargames与bash知识17 Bandit25(Bandit26) 关卡提示 从bandit25登录到bandit26应该相当容易…用户bandit26的shell不是/bin/bash,而是其他东西。找出它是什么,它是如何工作的,以及如何摆脱它。 推荐命令 ssh, cat, …

CSS基础笔记-05layout

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》《CSS基础笔记-03选择器》《CSS基础笔记-04cascade-specificity-inheritance》 文章目录 CSS基础笔记系列什么是CSS布局布局方法normal flowflexboxgridfloats 总结 什么是CSS布局 CSS布局是指在页面中对元素…

c语言学生管理系统

创建结构体里面包含学生的各种信息。 struct xs {int xh;char xm[20];int gs, yy, wl;double pj;struct xs* next; }; 创建菜单 void menu() {printf("\n************************************\n");printf("* 学生管理系统(1.0&#xff0…

C# 图解教程 第5版 —— 第25章 反射和特性

文章目录 25.1 元数据和反射25.2 Type 类25.3 获取 Type 对象25.4 什么是特性25.5 应用特性25.6 预定义的保留特性25.6.1 Obsolete 特性25.6.2 Conditional 特性25.6.3 调用者信息特性25.6.4 DebuggerStepThrough 特性25.6.5 其他预定义特性 25.7 关于应用特性的更多内容25.7.1…

51-12 多模态论文串讲—BLIP 论文精读

视觉语言预训练VLP模型最近在各种多模态下游任务上获得了巨大的成功,目前还有两个主要局限性: (1) 模型角度: 大多数方法要么采用encoder模型,要么采用encoder-decoder模型。然而,基于编码器的模型不太容易直接转换到文本生成任务&#xff0…

代码随想录 Leetcode242. 有效的字母异位词

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月14日&#xff09;&#xff1a; class Solution { public:bool isAnagram(string s, string t) {int hash[26] {0};for(int i 0; i < s.size(); i) {hash[s[i] - a];}for(int i 0; i < t.size(); i) {hash[t[i]…