写一个随机任务抽取器
一、前言
现在几乎没人还用纸质本来记日记了吧,所以我用 python 写了一个日记本,希望有所帮助。
二、逻辑构思
2.1 目标实现
每当我们想要通过程序设计实现自己想要的功能时,我们可以选择合适的编程语言和编辑器以及需要用到的插件和工具来搭建让自己感到最舒适的开发环境,我选择用 python 来实现这个日记本。它满足五个功能:自己记录日记的时间、查看日记、添加日记、删除日记以及退出。
2.2 搭建开发环境
① python 3.10
② python 随机数模块 random 和 os,sys 模块
③ python IDLE 和 python 图形界面模块 tkinter
④ Pyinstaller 打包 python 程序成 exe 文件
⑤ Inno Setup 6 编译器
前三个只需要在官网正常安装python后就全部满足了,都内置在python里面了,非常简洁强大。
第四个是第三方模块,需要用到 python 自带的 pip 安装,当然离线还是指定源安装都可以,只不过 pip 足够了。
在正常安装 python 后,安装时勾选过路径,就不需要额外配置环境变量了,只需要 CTRL + R,打开运行,输入 cmd,在 cmd 里直接输入:
pip install pyinstaller
2.3 Pyinstaller 打包
cmd 里面:pyinstaller -F py文件绝对路径
三、效果展示
3.1 初始化和添加日记
3.2 查看日记
3.1 删除日记
四、代码展示
#!/usr/bin/python
# diary.py
import sys
import time
import os.path
import tkinter as tk
# 判断文件是否存在,不存在就创建
if not os.path.exists(r"C:\diary"):
os.system(r"md {}".format(r"C:\diary"))
os.system(r"cd . > {}".format(r"C:\diary\diary_data.txt"))
# 加载缓存
with open(r"C:\diary\diary_data.txt", "r", encoding='utf-8') as f:
list = f.readlines()
list.append(list)
list.pop()
print('\n{}加载完成{}\n'.format(('='*10), ('='*10)))
def show_list(i):
"""这里定义了一个显示日记的函数"""
print('=' * 28)
print("——哟,来看日记啦——")
print("(温馨提示:可以根据序号删除日记)")
n = 0
for i in list:
s = str(n)
print(s + ":" + i)
n += 1
def add_list(user_input):
"""这里定义了一个添加日记的函数"""
try:
user_input = input("\n请输入日记的内容:")
with open(r"C:\diary\diary_data.txt", "a+", encoding='utf-8') as file:
time_data = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
file.write('【' + time_data + '】' + user_input + '\n')
new_list()
except (ValueError, IndexError, RuntimeError):
new_list()
def del_list(user_input):
"""这里定义了一个删除日记的函数"""
try:
user_input = int(input("请输入要删除的日记的序号:"))
with open(r"C:\diary\diary_data.txt", "r", encoding='utf-8') as f:
lines = f.readlines()
del lines[user_input]
with open(r"C:\diary\diary_data.txt", "w", encoding='utf-8') as f:
f.writelines(lines)
new_list()
except (ValueError, IndexError, RuntimeError):
new_list()
def new_list():
"""这里定义了一个重载程序的函数"""
new = sys.executable
print('\n')
print("{}程序更新数据中{}\n".format(('='*10), ('='*10)))
os.execl(new, new, *sys.argv)
def main():
# 设置窗口
root = tk.Tk()
root.geometry("260x224+1100+450")
root.title('你的日记')
root.attributes('-alpha', 0.95)
# 设置按钮及颜色
btn1 = tk.Button(root, text="点我查看日记", bd=15, bg='red', width=260)
btn2 = tk.Button(root, text="点我添加一个日记", bd=15, bg='Chocolate', width=260)
btn3 = tk.Button(root, text="点我删除一个日记", bd=15, bg='orange', width=260)
btn4 = tk.Button(root, text='退出', bd=15, command=root.quit, width=260)
btn1.pack()
btn2.pack()
btn3.pack()
btn4.pack()
# 将按钮和函数绑定
btn1.bind("<Button-1>", show_list)
btn2.bind("<Button-1>", add_list)
btn3.bind("<Button-1>", del_list)
# 将窗口挂起进入事件循环
root.mainloop()
if __name__ == '__main__':
main()