当前位置:网站首页>想好了吗?
想好了吗?
2022-08-04 05:24:00 【黎明前的霓虹】
背景
如今,我们日常生活中对电子产品的依赖越来越大。面对互联网上及电子产品本身的种种诱惑,我们有时会不知不觉地陷入其中,无法自拔。当自己突然意识到整天都在玩手机或电脑时,恐怕为时已晚。
为了保持眼睛健康,我写出了这款程序来约束自己。通过限制(根据用户具体需要)使用电脑的时间,可以减少对电脑的过度依赖,这样就有更多的时间来做其它有意义的事了!
简介
被打开后,一个窗口呈现在你眼前。你需要做的事情有两件:我要用电脑做什么呢?我要用多久呢?然后分别填到两个输入框里,就可以点击「确认」键了。这个时候,程序会自动将你输入的内容写入文档里(.usage,用普通记事本就可以打开),以便后面查询。你输入的「要使用的时间」(第二个输入框里的数字)将会成为电脑关机的倒计时,所以所你计划使用多长时间的电脑,它就真的给你兑现。
但是突然想反悔了怎么办呢?没关系,只需要再点开程序(关了的情况下),点击「取消关机」就行啦!
但是,如果你已经点过了「确定」却再次点击的话,程序就会提示你不能这样做哟!同理,取消关机也是一样的。(没都没有关机任务怎么能取消关机呢??)
当你提前完成了任务,准备关机时,只需要再进入程序,点击「立即关机」就可以关机了!
待能力提升后,会加入更多的功能的!敬请期待!
具体用法
方法一:直接下载程序
首先下载我提供的下载链接下载程序,杀毒软件可能会报错,不理它。然后将这个程序放进系统的启动目录C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
里,大功告成!
方法二:自编译程序
首先将我的源码复制到 .py 文件里面来。然后 pip install pyinstaller
。找一个全英文的文件夹
(最好是,否则很可能会报错),文件也改成全英文的。在这个文件夹内 右击+右键,点击「在此处打开 Powershell 窗口」(也可以是 命令行窗口),输入pyinstaller -F -w (file_name)[-i name_of_icon]
(pyinstaller -F -w 文件的全称,后面那个是加图标,注意只能是 16×16 的尺寸!)
之后会说Building EXE from EXE-00.toc completed successfully.
后打开文件夹内的 dist 文件夹,这就是打包后的程序啦!后面的操作参照方法一的后半段。
这里只提供简单的步骤,可能还会遇上各种各样的问题。请自行百度。
截图
这个版本因为时间原因,暂时没有截图。
彩蛋(菜单)
悄悄告诉你,轻轻点一下菜单栏上的 about 有惊喜哟!
源码
import os
import getpass
import datetime
import tkinter as tk
from tkinter import messagebox
dir_name = "C:\\Users\\" + getpass.getuser() + "\\Documents\\电脑使用情况"
date = datetime.datetime.now().strftime("%Y-%m-%d")
def tip(a, b):
"""判断"""
if a and b:
try:
mins = int(b)
return mins
except:
messagebox.showwarning("警告", "请在第二个框内输入有效的值!")
return False
else:
messagebox.showwarning("警告", "请输入有效的值!")
return False
def write_data(started_time, thing, minute):
"""写入文件数据 started_time: 点击「确定」时的时间,thing: 第一个输入框, minute: 第二个输入框"""
''' 写入数据 '''
global date, dir_name
is_exists = os.path.exists(dir_name)
if not is_exists:
os.makedirs(dir_name)
file = open(dir_name + "\\" + date + ".usage", "w", encoding="utf-8")
file.write("Version: 1.2.0_release\n")
file.write("开始使用时间: " + started_time + "\n")
file.write("将要做的事情: " + thing + "\n")
file.write("计划时间: " + str(minute))
file.close()
def get_info():
"""开机时程序功能 There isn't any arguments that need to be brought into this func."""
thing = en_gonna_do.get()
y = en_anticipated_time.get()
minute = tip(thing, y)
if not minute:
return
started_time = datetime.datetime.now()
end_time = (started_time + datetime.timedelta(minutes =
minute)).strftime("%H:%M")
situ = os.system("shutdown -s -t {}".format(str(minute * 60)))
if situ != 0:
messagebox.showerror("提示", "当前已有关机的计划。请勿重复!")
return
messagebox.showinfo("提示", "将于 {} 关闭计算机".format(end_time))
write_data(started_time.strftime("%H:%M"), thing, minute)
def shutdown_now(wd_root):
"""立即关机,实际关机时间将会被写入文档 传一个 Tk 类的主窗口进来即可"""
global date, dir_name
result1 = messagebox.askokcancel("立即关机",
"未保存的工作将不会被还原。你确定要立即关机?")
if result1 == True:
stopped_time = datetime.datetime.now().strftime("%H:%M")
file = open(dir_name + "\\" + date + ".usage", "a", encoding="utf-8")
file.write("\n\n实际关机时间: " + stopped_time)
file.close()
wd_root.destroy()
os.system("shutdown -s -t 100")
def about():
"""关于程序的窗口 There isn't any arguments that need to be brought into this func."""
wd_about = tk.Tk()
wd_about.title("想好了吗?")
wd_about.geometry("450x260")
tk.Label(wd_about, width = 100, font = ("黑体", 40),
text = "想好了吗?").pack(pady = 10)
tk.Label(wd_about, font = ("Times New Roman", 15),
width = 100, text = "\nRegistered to DawnNeon")
tk.Label(wd_about, font = ("Times New Roman", 15),
text = "Copyright 2020-2021 Little Window Ltd.").pack()
tk.Label(wd_about, font = ("Times New Roman", 15),
text = "Version Release 1.2.0, August 24 2021").pack()
tk.Label(wd_about, font = ("Times New Roman", 13),
wraplength = 400, text = "From the bottom of my heart, \
I thank all those who gives me much help like the brightest stars \
even in the darkest time!").pack()
tk.Label(wd_about, text = "Website & Support: \
https://www.cnblogs.com/DawnNeon/\nhttps://blog.csdn.net/Dawn_Neon").pack()
wd_about.mainloop()
'''欲查看更新内容,请关注我哟!'''
def exit_prog(wd_root):
"""用户确认是否退出程序 传一个 Tk 类的主窗口进来即可"""
result2 = messagebox.askokcancel("退出程序", "你确定要退出程序?")
if result2 == True:
wd_root.destroy()
def cancel_shutdown():
"""取消关机 There isn't any arguments that need to be brought into this func."""
result = messagebox.askokcancel("确认", "你确定要取消关闭计算机吗?")
if result:
situ2 = os.system("shutdown -a")
if situ2 != 0:
messagebox.showerror("提示", "当前没有任何进行中的关机过程!")
return
wd_root = tk.Tk()
wd_root.title("想好了吗")
wd_root.resizable(False, False)
tk.Label(wd_root, text = "1. 我要用电脑做什么?",
font = ("黑体", 30)).grid(column = 1, row = 1,
pady = 10, padx = 10, sticky = "w", columnspan = 2)
en_gonna_do = tk.Entry(wd_root, font = ("微软雅黑", 20),
justify = "left", relief = "groove", width = 37)
en_gonna_do.grid(column = 1, row = 2, sticky = "w",
pady = 10, padx = 48, columnspan = 2)
tk.Label(wd_root, text = "2. 我要用多长时间?(单位:分钟)",
font = ("黑体", 30)).grid(column = 1, row = 3, pady = 10, padx = 10,
sticky = "w", columnspan = 2)
en_anticipated_time = tk.Entry(wd_root, font = ("微软雅黑", 20),
justify = "left", relief = "groove", width = 37)
en_anticipated_time.grid(column = 1, row = 4, sticky = "w",
pady = 10, padx = 48, columnspan = 2)
tk.Button(wd_root, text = "确认", font = ("宋体", 30), width = 15,
relief = "groove", command = get_info).grid(column = 1,
row = 5, padx = 10, pady = 10)
tk.Button(wd_root, text = "取消关机", font = ("宋体", 30), width = 15,
relief = "groove", command = cancel_shutdown).grid(column = 2, row = 5,
padx = 10, pady = 10)
tk.Button(wd_root, text = "立即关机", font = ("宋体", 20), width = 30,
relief = "groove", command = lambda:shutdown_now(wd_root)).grid(column = 1, row = 6,
padx = 10, pady = 10, columnspan = 2)
tk.Button(wd_root, text = "退出程序", font = ("宋体", 20), width = 30,
relief = "groove", command = lambda:exit_prog(wd_root)).grid(column = 1, row = 7,
padx = 10, pady = 10, columnspan = 2)
menubar = tk.Menu(wd_root)
mu_others = tk.Menu(menubar, tearoff = False)
menubar.add_cascade(label = "其它", menu = mu_others)
mu_others.add_command(label = "关于", command = about)
wd_root.config(menu = menubar)
wd_root.mainloop()
2021年8月20日更新 · Release 1.1.0
- 现在写入的文件会保存在一个叫做 Computer usage 的文件夹里面了
2021年8月24日更新 · Release 1.2.0
- 新增功能:「立即关机」,并且会将实际的关机时间记录下来
- 文件将保存在
C:\Users\(User name)\文档\电脑使用情况
- 文件头行会有版本标识:Version: XXX,方便后续版本升级兼容等
- 在「关于」界面里提供了我的网站(下个版本整上超链接吧)
修复的 Bug:
- 把打包后的程序放在启动目录
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
下,每次启动后输入相关内容点确定,将不会有任何反应。原因是因为没有管理员权限(我还使劲钻研呢,后来发现没有那个必要)
未修复的 Bug
- 打包后,每次点击「确定」或「取消关机」后,都会出现控制台窗口且一闪而过(我是用 pyinstaller -F -w .py 来打包的啊,途中出过很多次错)。希望有大佬提出宝贵建议!
写在最后
说实话,这可能是我写的最后一个程序了。暑假里因为写程序耽误了太多时间和精力,甚至被父母骂哭过!那是因为我没有搞清楚主次啊。所以为了纪念我的编程「生涯」(只有两年有余)——一年学了一阵 C++ 的算法,可是都已经忘得差不多了。然后又转来学 Python。虽然对算法及面向对象的思想一概不知(所以我写 Tkinter GUI 都不会用封装之类的 class),但我依然愿意接受新知识。我即将迈进初中的第二个年头,也祝我学业「顺利」(会吗?)!
作者:DawnNeon
若要转载请标明出处:https://blog.csdn.net/Dawn_Neon/article/details/119888595
边栏推荐
猜你喜欢
SLSA 框架与软件供应链安全防护
[Cocos 3.5.2]开启模型合批
自动化测试的成本高效果差,那么自动化测试的意义在哪呢?
【评价类模型】Topsis法(优劣解距离法)
word 公式编辑器 键入技巧 | 写数学作业必备速查表
Do you think border-radius is just rounded corners?【Various angles】
3面头条,花7天整理了面试题和学习笔记,已正式入职半个月
心余力绌:企业面临的软件供应链安全困境
Turn: Management is the love of possibility, and managers must have the courage to break into the unknown
CentOS7 —— yum安装mysql
随机推荐
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资
Will the 2023 PMP exam use the new version of the textbook?Reply is here!
谷粒商城-基础篇(项目简介&项目搭建)
C专家编程 第5章 对链接的思考 5.2 动态链接的优点
4.3 Annotation-based declarative transactions and XML-based declarative transactions
如何将 DevSecOps 引入企业?
The Road to Ad Monetization for Uni-app Mini Program Apps: Full Screen Video Ads
去重的几种方式
如何低成本修bug?测试左移给你答案
Resolved error: npm WARN config global `--global`, `--local` are deprecated
Redis common interview questions
[SemiDrive source code analysis] [MailBox inter-core communication] 47 - Analysis of RPMSG_IPCC_RPC mode limit size of single transmission and limit bandwidth test
符号表
C Expert Programming Chapter 5 Thinking about Linking 5.1 Libraries, Linking and Loading
TSF微服务治理实战系列(一)——治理蓝图
入坑软件测试的经验与建议
Dynamic programming of the division of numbers
【一步到位】Jenkins的安装、部署、启动(完整教程)
string类简介