写一个随机任务抽取器
一、前言
物欲横流的时代,让人迷失自我,被各种各样的诱惑吸引注意力,如果想离自己的目标越来越近,人们需要制定一些即使身不由己的目标,但可以通过随机的方式给自己一个黑盒的驱动力,所以我用 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.3 显示所有任务
3.1 删除任务
四、代码展示
#!/usr/bin/python
# random_task.py
import sys
import random
import os.path
import tkinter as tk
# 判断文件是否存在,不存在就创建
if not os.path.exists(r"C:\random_task"):
os.system(r"md {}".format(r"C:\random_task"))
os.system(r"cd . > {}".format(r"C:\random_task\task_data.txt"))
# 加载缓存
with open(r"C:\random_task\task_data.txt", "r", encoding='utf-8') as f:
list = f.readlines()
list.append(list)
list.pop()
print('\n{}加载完成{}\n'.format(('='*10), ('='*10)))
def random_list(result):
"""这里定义了一个可以随机抽取任务的函数"""
try:
result = random.choice(list)
result_str = str(result)
print('恭喜你抽到了:' + result_str)
except IndexError:
print('——没有任务,请添加——')
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:\random_task\task_data.txt", "a+", encoding='utf-8') as file:
file.write(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:\random_task\task_data.txt", "r", encoding='utf-8') as f:
lines = f.readlines()
del lines[user_input]
with open(r"C:\random_task\task_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("260x280+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, bg='yellow', width=260)
btn5 = tk.Button(root, text='退出', bd=15, command=root.quit, width=260)
btn1.pack()
btn2.pack()
btn3.pack()
btn4.pack()
btn5.pack()
# 将按钮和函数绑定
btn1.bind("<Button-1>", random_list)
btn2.bind("<Button-1>", show_list)
btn3.bind("<Button-1>", add_list)
btn4.bind("<Button-1>", del_list)
# 将窗口挂起进入事件循环
root.mainloop()
if __name__ == '__main__':
main()