From f3effbc268cd1d87e4001681a2c053492fe87641 Mon Sep 17 00:00:00 2001 From: shenjack <3695888@qq.com> Date: Sun, 3 Nov 2024 22:05:22 +0800 Subject: [PATCH] ruff fmt --- 24-10-28.py | 1766 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 1203 insertions(+), 563 deletions(-) diff --git a/24-10-28.py b/24-10-28.py index b52f7ba..27a7944 100644 --- a/24-10-28.py +++ b/24-10-28.py @@ -1,54 +1,88 @@ from threading import Thread from tkinter import * -from arcade import load_sound,play_sound,stop_sound +from arcade import load_sound, play_sound, stop_sound from tkinter import font import tkinter.filedialog -import random,tkinter,time,xlrd,datetime,logging,hashlib,os,shutil,pyperclip,requests,threading +import random, tkinter, time, xlrd, datetime, logging, hashlib, os, shutil, pyperclip, requests, threading from ttkbootstrap import Style from tkinter import ttk from docx import Document from tkinter import messagebox from PIL import Image, ImageTk + + def check_pwd(pwd): global password - password=False + password = False try: - with open('support/config.ini') as v: + with open("support/config.ini") as v: for x in v.readlines(): - if 'pwd:' in x: + if "pwd:" in x: break except: - on_button_click('没有找到密码文件','') - pwd='pwd:'+pwd - if pwd==x: - password=True + on_button_click("没有找到密码文件", "") + pwd = "pwd:" + pwd + if pwd == x: + password = True return True else: - on_button_click('请检查密码','') + on_button_click("请检查密码", "") return False + + def loading(): - global fin,a,root,screen_width,ll,style,back,back_photo,up_photo,down_photo,stop_photo,star,star_photo,bigback_photo,paus_photo,cross_photo,speed,save_and_continue_photo,continued_photo,lock_photo,countdown_photo,sport_photo,eye_photo,line_photo,flag_photo,pen_photo,tick_photo,choice_photo,image_dict,screen_height - fin=False - style = Style(theme='newtheme') + global \ + fin, \ + a, \ + root, \ + screen_width, \ + ll, \ + style, \ + back, \ + back_photo, \ + up_photo, \ + down_photo, \ + stop_photo, \ + star, \ + star_photo, \ + bigback_photo, \ + paus_photo, \ + cross_photo, \ + speed, \ + save_and_continue_photo, \ + continued_photo, \ + lock_photo, \ + countdown_photo, \ + sport_photo, \ + eye_photo, \ + line_photo, \ + flag_photo, \ + pen_photo, \ + tick_photo, \ + choice_photo, \ + image_dict, \ + screen_height + fin = False + style = Style(theme="newtheme") root = style.master - style.configure('TButton') + style.configure("TButton") DraggableWindow(root) screen_width = root.winfo_screenwidth() - screen_height = root.winfo_screenheight() + screen_height = root.winfo_screenheight() root.resizable(0, 0) root.overrideredirect(1) for x in range(75): - win_width = (4*x)+201 - win_height = (4*x)+2 + win_width = (4 * x) + 201 + win_height = (4 * x) + 2 win_x = screen_width // 2 - win_width // 2 win_y = screen_height // 2 - win_height // 2 # 窗口垂直居中 - root.geometry('{}x{}+{}+{}'.format(win_width, win_height, win_x, win_y)) + root.geometry("{}x{}+{}+{}".format(win_width, win_height, win_x, win_y)) root.update() root.update() - log('正在清理文件','info') - while fin==False: - c = tkinter.Label(text=ll, font=('宋体',10)) - c.place(relx=0.5, rely=0.8, anchor='center') + log("正在清理文件", "info") + while fin == False: + c = tkinter.Label(text=ll, font=("宋体", 10)) + c.place(relx=0.5, rely=0.8, anchor="center") time.sleep(0.08) root.update_idletasks() # 刷新 root.update() @@ -58,14 +92,14 @@ def loading(): c.destroy() except: pass - k = tkinter.Label(text='本次共清理了\n' + str(a) + '个文件', font=('宋体', 48)) - log('本次共清理了' + str(a) + '个文件','info') - k.place(relx=0.5, rely=0.5, anchor='center') + k = tkinter.Label(text="本次共清理了\n" + str(a) + "个文件", font=("宋体", 48)) + log("本次共清理了" + str(a) + "个文件", "info") + k.place(relx=0.5, rely=0.5, anchor="center") root.update() root.after(1500) k.destroy() - k = tkinter.Label(text='正在处理图片', font=('宋体', 24)) - k.place(relx=0.5, rely=0.5, anchor='center') + k = tkinter.Label(text="正在处理图片", font=("宋体", 24)) + k.place(relx=0.5, rely=0.5, anchor="center") back = Image.open("support/back.png") smallback = back.resize((30, 30)) back_photo = ImageTk.PhotoImage(smallback) @@ -123,67 +157,95 @@ def loading(): choiced = Image.open("support/choice.png") choiced = choiced.resize((40, 40)) choice_photo = ImageTk.PhotoImage(choiced) - subjects = open('support/subjects', 'r').read().splitlines() # 读取文件并分割成行 - subjects.append('others') + subjects = ( + open("support/subjects", "r").read().splitlines() + ) # 读取文件并分割成行 + subjects.append("others") image_dict = {} for image_file in subjects: try: subphoto = Image.open("support/" + image_file + ".png") except: try: - file = requests.get('http://shenjack.top:5100/people/what/raw/branch/main/' + image_file + ".png") - open("support/" + image_file + ".png", 'wb').write(file.content) + file = requests.get( + "http://shenjack.top:5100/people/what/raw/branch/main/" + + image_file + + ".png" + ) + open("support/" + image_file + ".png", "wb").write(file.content) subphoto = Image.open("support/" + image_file + ".png") except: try: subphoto = Image.open("support/others.png") except: try: - file = requests.get('http://shenjack.top:5100/people/what/raw/branch/main/others.png') - open("support/others.png", 'wb').write(file.content) + file = requests.get( + "http://shenjack.top:5100/people/what/raw/branch/main/others.png" + ) + open("support/others.png", "wb").write(file.content) subphoto = Image.open("support/others.png") except: subphoto = Image.open("support/up.png") subphoto = subphoto.resize((40, 40)) subject_photo = ImageTk.PhotoImage(subphoto) - image_dict[os.path.basename(image_file)] = subject_photo # 将文件名作为键,图片对象作为值存储在字典中 - schedule('fromclean') + image_dict[os.path.basename(image_file)] = ( + subject_photo # 将文件名作为键,图片对象作为值存储在字典中 + ) + schedule("fromclean") root.mainloop() -def log(content,rate): - if rate=='info': +def log(content, rate): + if rate == "info": logging.info(content) - elif rate=='warning': + elif rate == "warning": logging.warning(content) - elif rate=='error': + elif rate == "error": logging.error(content) else: - logging.error('日志评级不正确,记录内容为:'+content) - with open('support/config.ini','a+') as f: - a=f.readlines() + logging.error("日志评级不正确,记录内容为:" + content) + with open("support/config.ini", "a+") as f: + a = f.readlines() for x in range(len(a)): - if '日志处理后sha256' in a[x]: + if "日志处理后sha256" in a[x]: del f.readlines()[x] - f.write('日志处理后sha256:'+file_sha256(r'support/journal.log')) -def on_button_click(content,pppp): + f.write("日志处理后sha256:" + file_sha256(r"support/journal.log")) + + +def on_button_click(content, pppp): wait_window = tkinter.Toplevel(root) - wait_window.wm_attributes('-topmost', 1) + wait_window.wm_attributes("-topmost", 1) win_width = 400 win_height = 300 wait_window.overrideredirect(True) win_x = screen_width - win_width win_y = wait_window.winfo_screenheight() // 2 - win_height // 2 - wait_window.geometry('{}x{}+{}+{}'.format(win_width, win_height, win_x, win_y)) - p = tkinter.Label(wait_window, text=content, font=('仿宋', 24), justify='left') - p.place(rely=0.1, relx=0.5, anchor='n') - pp = tkinter.Button(wait_window, text="确定", command=wait_window.destroy, font=('宋体', 24),bg='#4472c4',activebackground='#4472c4',fg='white') - pp.place(rely=0.8, relx=0.3, anchor='center') - if pppp=='pppp': - ppp = tkinter.Entry(wait_window, width=30,show='*') - ppp.place(relx=0.5, rely=0.6, anchor='center') - pppp=tkinter.Button(wait_window,text='忽略',command=lambda:check_pwd(ppp.get()) and wait_window.destroy(),font=('宋体', 24),bg='#4472c4',activebackground='#4472c4',fg='white') - pppp.place(relx=0.6,rely=0.8,anchor='center') + wait_window.geometry("{}x{}+{}+{}".format(win_width, win_height, win_x, win_y)) + p = tkinter.Label(wait_window, text=content, font=("仿宋", 24), justify="left") + p.place(rely=0.1, relx=0.5, anchor="n") + pp = tkinter.Button( + wait_window, + text="确定", + command=wait_window.destroy, + font=("宋体", 24), + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + pp.place(rely=0.8, relx=0.3, anchor="center") + if pppp == "pppp": + ppp = tkinter.Entry(wait_window, width=30, show="*") + ppp.place(relx=0.5, rely=0.6, anchor="center") + pppp = tkinter.Button( + wait_window, + text="忽略", + command=lambda: check_pwd(ppp.get()) and wait_window.destroy(), + font=("宋体", 24), + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + pppp.place(relx=0.6, rely=0.8, anchor="center") wait_window.wait_window() return True @@ -199,7 +261,11 @@ class DraggableWindow: def start_move(self, event): # 如果触发事件的控件是Button或Text,就不开始移动窗口 - if isinstance(event.widget, tkinter.Button) or isinstance(event.widget, tkinter.Text) or isinstance(event.widget, ttk.Button): + if ( + isinstance(event.widget, tkinter.Button) + or isinstance(event.widget, tkinter.Text) + or isinstance(event.widget, ttk.Button) + ): return self.draggable = True self.offset["x"] = event.x @@ -211,34 +277,96 @@ class DraggableWindow: def on_move(self, event): # 如果触发事件的控件是Button或Text,就不移动窗口 - if isinstance(event.widget, tkinter.Button) or isinstance(event.widget, tkinter.Text) or isinstance(event.widget, tkinter.Entry) or nodrag == True: + if ( + isinstance(event.widget, tkinter.Button) + or isinstance(event.widget, tkinter.Text) + or isinstance(event.widget, tkinter.Entry) + or nodrag == True + ): return if self.draggable: x = self.root.winfo_x() + (event.x - self.offset["x"]) y = self.root.winfo_y() + (event.y - self.offset["y"]) self.root.geometry(f"+{x}+{y}") -photo=None -info='' -canceltopping=False + +photo = None +info = "" +canceltopping = False d = datetime.datetime.now() -chosed=[] -zhou=['周一','周二','周三','周四','周五','周六','周日'] -shouldnot=['孙妍','王浩楠','张一樵','李克强','蔡奇','张建波','任杰','齐静','刘爽','付金生','李梦莉','陈红','崔渊伟','高佳','张硕','甘霖','Matt','matt','岳欣欣','刘立忠','于跃','梅源','王静杰','孙媛媛','齐鹤群','王旭圆','许月玥','王慧','李月','付鹏飞','王芳','习近平','隋亚珍','特朗普','郭晶','苏瑶','许久辰','张三','李四','王五','赵六','田七','安倍晋三','bilibili','哔哩哔哩'] -logging.basicConfig(filename=os.getcwd()+"/support/journal.log", filemode="a+", format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt='', level=logging.DEBUG) +chosed = [] +zhou = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] +shouldnot = [ + "孙妍", + "王浩楠", + "张一樵", + "李克强", + "蔡奇", + "张建波", + "任杰", + "齐静", + "刘爽", + "付金生", + "李梦莉", + "陈红", + "崔渊伟", + "高佳", + "张硕", + "甘霖", + "Matt", + "matt", + "岳欣欣", + "刘立忠", + "于跃", + "梅源", + "王静杰", + "孙媛媛", + "齐鹤群", + "王旭圆", + "许月玥", + "王慧", + "李月", + "付鹏飞", + "王芳", + "习近平", + "隋亚珍", + "特朗普", + "郭晶", + "苏瑶", + "许久辰", + "张三", + "李四", + "王五", + "赵六", + "田七", + "安倍晋三", + "bilibili", + "哔哩哔哩", +] +logging.basicConfig( + filename=os.getcwd() + "/support/journal.log", + filemode="a+", + format="%(asctime)s %(name)s:%(levelname)s:%(message)s", + datefmt="", + level=logging.DEBUG, +) + class PILFilter(logging.Filter): def filter(self, record): return record.name != "PIL" or record.levelno > logging.DEBUG + handler = logging.StreamHandler() handler.addFilter(PILFilter()) # 设置日志级别和处理器 logging.basicConfig(level=logging.DEBUG, handlers=[handler]) + + def file_hash(file_path: str, hash_method) -> str: h = hash_method() - with open(file_path, 'rb') as f: + with open(file_path, "rb") as f: while True: b = f.read(8192) if not b: @@ -246,55 +374,80 @@ def file_hash(file_path: str, hash_method) -> str: h.update(b) f.close() return h.hexdigest() + + def file_sha256(file_path: str) -> str: return file_hash(file_path, hashlib.sha256) + + def check_class(): - global zhou,d + global zhou, d try: excel = xlrd.open_workbook("support/时刻表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index('时刻表') # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index("时刻表") # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 for x in range(1, len(listindes)): - a = listindes[x].split('-') - start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[0], '%Y-%m-%d%H:%M') - end_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[1], '%Y-%m-%d%H:%M') + a = listindes[x].split("-") + start_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[0], "%Y-%m-%d%H:%M" + ) + end_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[1], "%Y-%m-%d%H:%M" + ) now_time = datetime.datetime.now() if start_time < now_time < end_time: excel = xlrd.open_workbook("support/课程表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index(zhou[d.weekday()]) # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index( + zhou[d.weekday()] + ) # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 try: - ax=1 - while listindes[x+ax]=='升旗' or listindes[x+ax]=='上操' or listindes[x+ax]=='吃饭' or listindes[x+ax]=='眼操': - ax+=1 - return listindes[x], listindes[x+ax] + ax = 1 + while ( + listindes[x + ax] == "升旗" + or listindes[x + ax] == "上操" + or listindes[x + ax] == "吃饭" + or listindes[x + ax] == "眼操" + ): + ax += 1 + return listindes[x], listindes[x + ax] except: return listindes[x] return False except: return False + + def rest(): try: excel = xlrd.open_workbook("support/时间表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index('时间表') # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index("时间表") # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 for x in range(1, len(listindes)): - a = listindes[x].split('-') - start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[0], '%Y-%m-%d%H:%M') - end_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[1], '%Y-%m-%d%H:%M') + a = listindes[x].split("-") + start_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[0], "%Y-%m-%d%H:%M" + ) + end_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[1], "%Y-%m-%d%H:%M" + ) now_time = datetime.datetime.now() if start_time < now_time < end_time: return True return False except: return False -z=False + + +z = False + + def countdown(): global speed for btn in root.place_slaves(): @@ -302,46 +455,79 @@ def countdown(): def returnforpaused(whattime): current_time = datetime.datetime.now().time() - current_datetime = datetime.datetime.combine(datetime.date.today(), current_time) + current_datetime = datetime.datetime.combine( + datetime.date.today(), current_time + ) future_datetime = current_datetime + whattime future_time = future_datetime.time().replace(microsecond=0) return future_time def paused(whattime): - global flag,star_photo + global flag, star_photo flag = False - pause = tkinter.Button(image=star_photo, command=lambda: updated(returnforpaused(whattime)), font=('宋体', 30)) - pause.grid(column=0, row=3, sticky='nsew') + pause = tkinter.Button( + image=star_photo, + command=lambda: updated(returnforpaused(whattime)), + font=("宋体", 30), + ) + pause.grid(column=0, row=3, sticky="nsew") def updated(future_time): - global starttime, flag,bigback_photo,stop_photo,paus_photo + global starttime, flag, bigback_photo, stop_photo, paus_photo flag = True for child in root.grid_slaves(): child.grid_remove() - time1 = datetime.time(int(str(future_time).split(':')[0]), int(str(future_time).split(':')[1]), - int(str(future_time).split(':')[2])) + time1 = datetime.time( + int(str(future_time).split(":")[0]), + int(str(future_time).split(":")[1]), + int(str(future_time).split(":")[2]), + ) datetime1 = datetime.datetime.combine(datetime.date.today(), time1) current_time = datetime.datetime.now().time() - pause = tkinter.Button(image=paus_photo,command=lambda: paused( - datetime1 - datetime.datetime.combine(datetime.date.today(), current_time).replace(microsecond=0)), - font=('宋体', 30)) - pause.grid(column=0, row=3, sticky='nsew') - cancel = tkinter.Button(image=stop_photo,command=lambda: welcome(), font=('宋体', 30)) - cancel.grid(column=1, row=3, sticky='nsew') - back = tkinter.Button(image=bigback_photo,command=lambda: schedule('fromclean'), font=('宋体', 30),height=60) - back.grid(column=2, row=3, sticky='nsew') + pause = tkinter.Button( + image=paus_photo, + command=lambda: paused( + datetime1 + - datetime.datetime.combine( + datetime.date.today(), current_time + ).replace(microsecond=0) + ), + font=("宋体", 30), + ) + pause.grid(column=0, row=3, sticky="nsew") + cancel = tkinter.Button( + image=stop_photo, command=lambda: welcome(), font=("宋体", 30) + ) + cancel.grid(column=1, row=3, sticky="nsew") + back = tkinter.Button( + image=bigback_photo, + command=lambda: schedule("fromclean"), + font=("宋体", 30), + height=60, + ) + back.grid(column=2, row=3, sticky="nsew") while flag == True and datetime.datetime.now().time() <= ( - datetime.time(int(str(future_time).split(':')[0]), int(str(future_time).split(':')[1]), - int(str(future_time).split(':')[2]))): + datetime.time( + int(str(future_time).split(":")[0]), + int(str(future_time).split(":")[1]), + int(str(future_time).split(":")[2]), + ) + ): current_time = datetime.datetime.now().time() datetime2 = datetime.datetime.combine(datetime.date.today(), current_time) time_difference = datetime1 - datetime2 hours = time_difference.seconds // 3600 minutes = (time_difference.seconds % 3600) // 60 seconds = time_difference.seconds % 60 - tkinter.Label(text=str(hours).zfill(2), font=('宋体', 50)).grid(column=0, row=1, sticky='nsew') - tkinter.Label(text=str(minutes).zfill(2), font=('宋体', 50)).grid(column=1, row=1, sticky='nsew') - tkinter.Label(text=str(seconds).zfill(2), font=('宋体', 50)).grid(column=2, row=1, sticky='nsew') + tkinter.Label(text=str(hours).zfill(2), font=("宋体", 50)).grid( + column=0, row=1, sticky="nsew" + ) + tkinter.Label(text=str(minutes).zfill(2), font=("宋体", 50)).grid( + column=1, row=1, sticky="nsew" + ) + tkinter.Label(text=str(seconds).zfill(2), font=("宋体", 50)).grid( + column=2, row=1, sticky="nsew" + ) root.update() time.sleep(1) else: @@ -354,37 +540,56 @@ def countdown(): global bigback_photo for child in root.grid_slaves(): child.grid_remove() - tkinter.Label(text='时间到了', font=('华文行楷', 50)).grid(column=0, columnspan=3, row=1, sticky='nsew') - cancel = tkinter.Button(text='确定', command=lambda: stop_sound(player) | welcome(), font=('宋体', 30),bg='#4472c4',activebackground='#4472c4',fg='white') - cancel.grid(column=0, row=3, sticky='nsew') - back = tkinter.Button(image=bigback_photo, command=lambda: stop_sound(player) | schedule('fromclean'), font=('宋体', 30),height=60,bg='#4472c4',activebackground='#4472c4',fg='white') - back.grid(column=2, row=3, sticky='nsew') + tkinter.Label(text="时间到了", font=("华文行楷", 50)).grid( + column=0, columnspan=3, row=1, sticky="nsew" + ) + cancel = tkinter.Button( + text="确定", + command=lambda: stop_sound(player) | welcome(), + font=("宋体", 30), + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + cancel.grid(column=0, row=3, sticky="nsew") + back = tkinter.Button( + image=bigback_photo, + command=lambda: stop_sound(player) | schedule("fromclean"), + font=("宋体", 30), + height=60, + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + back.grid(column=2, row=3, sticky="nsew") sound = load_sound("support/sound.mp3") player = play_sound(sound) def start(): remain = hour * 60 * 60 + minute * 60 + second current_time = datetime.datetime.now().time() - current_datetime = datetime.datetime.combine(datetime.date.today(), current_time) + current_datetime = datetime.datetime.combine( + datetime.date.today(), current_time + ) future_datetime = current_datetime + datetime.timedelta(seconds=remain) future_time = future_datetime.time().replace(microsecond=0) updated(future_time) def times(unit, way): global hour, minute, second, root - if unit == 'hour': - if way == '+': + if unit == "hour": + if way == "+": if hour >= 23: pass else: hour = hour + 1 - elif way == '-': + elif way == "-": if hour <= 0: pass else: hour = hour - 1 - elif unit == 'minute': - if way == '+': + elif unit == "minute": + if way == "+": if minute >= 59 and hour < 23: hour = hour + 1 minute = minute % 59 @@ -392,13 +597,13 @@ def countdown(): pass else: minute = minute + 1 - elif way == '-': + elif way == "-": if minute <= 0: pass else: minute = minute - 1 - elif unit == 'second': - if way == '+': + elif unit == "second": + if way == "+": if second >= 59 and minute < 59: minute = minute + 1 second = second % 59 @@ -410,15 +615,22 @@ def countdown(): pass else: second = second + 1 - elif way == '-': + elif way == "-": if second <= 0: pass else: second = second - 1 - tkinter.Label(text=str(hour).zfill(2), font=('宋体', 50)).grid(column=0, row=1, sticky='nsew') - tkinter.Label(text=str(minute).zfill(2), font=('宋体', 50)).grid(column=1, row=1, sticky='nsew') - tkinter.Label(text=str(second).zfill(2), font=('宋体', 50)).grid(column=2, row=1, sticky='nsew') + tkinter.Label(text=str(hour).zfill(2), font=("宋体", 50)).grid( + column=0, row=1, sticky="nsew" + ) + tkinter.Label(text=str(minute).zfill(2), font=("宋体", 50)).grid( + column=1, row=1, sticky="nsew" + ) + tkinter.Label(text=str(second).zfill(2), font=("宋体", 50)).grid( + column=2, row=1, sticky="nsew" + ) root.update() + root.grid_rowconfigure(1, weight=1) root.grid_columnconfigure(0, weight=1) root.grid_columnconfigure(1, weight=1) @@ -431,37 +643,84 @@ def countdown(): wid = root.winfo_width() + step_wid hei = root.winfo_height() + step_hei root.geometry( - '{}x{}+{}+{}'.format(int(wid), int(hei), int(root.winfo_x() - step_x), int(root.winfo_y() - step_y))) + "{}x{}+{}+{}".format( + int(wid), + int(hei), + int(root.winfo_x() - step_x), + int(root.winfo_y() - step_y), + ) + ) root.update() root.geometry( - '{}x{}+{}+{}'.format(500, 300, int(screen_width // 2 - 500 / 2), int(screen_height // 2 - 300 / 2))) + "{}x{}+{}+{}".format( + 500, + 300, + int(screen_width // 2 - 500 / 2), + int(screen_height // 2 - 300 / 2), + ) + ) + def welcome(): - global starttime, hour, minute, second, flag,up_photo,down_photo,bigback_photo + global \ + starttime, \ + hour, \ + minute, \ + second, \ + flag, \ + up_photo, \ + down_photo, \ + bigback_photo for child in root.grid_slaves(): child.grid_remove() hour = 0 minute = 0 second = 0 flag = False - tkinter.Button(image=up_photo, command=lambda: times('hour', '+'), font=('宋体', 30),height=60).grid(column=0, row=0, - sticky='nsew') - tkinter.Button(image=up_photo, command=lambda: times('minute', '+'), font=('宋体', 30)).grid(column=1, row=0, - sticky='nsew') - tkinter.Button(image=up_photo, command=lambda: times('second', '+'), font=('宋体', 30)).grid(column=2, row=0, - sticky='nsew') - tkinter.Button(image=down_photo, command=lambda: times('hour', '-'), font=('宋体', 30),height=60).grid(column=0, row=2, - sticky='nsew') - tkinter.Button(image=down_photo, command=lambda: times('minute', '-'), font=('宋体', 30)).grid(column=1, row=2, - sticky='nsew') - tkinter.Button(image=down_photo, command=lambda: times('second', '-'), font=('宋体', 30)).grid(column=2, row=2,sticky='nsew') - tkinter.Label(text=str(hour).zfill(2), font=('宋体', 50)).grid(column=0, row=1, sticky='nsew') - tkinter.Label(text=str(minute).zfill(2), font=('宋体', 50)).grid(column=1, row=1, sticky='nsew') - tkinter.Label(text=str(second).zfill(2), font=('宋体', 50)).grid(column=2, row=1, sticky='nsew') - starttime = tkinter.Button(image=star_photo, command=lambda: start(), font=('宋体', 30),height=60) - starttime.grid(column=0, row=3, columnspan=2, sticky='nsew') - back = tkinter.Button(image=bigback_photo, command=lambda: schedule('fromclean'), font=('宋体', 30)) - back.grid(column=2, row=3, sticky='nsew') + tkinter.Button( + image=up_photo, + command=lambda: times("hour", "+"), + font=("宋体", 30), + height=60, + ).grid(column=0, row=0, sticky="nsew") + tkinter.Button( + image=up_photo, command=lambda: times("minute", "+"), font=("宋体", 30) + ).grid(column=1, row=0, sticky="nsew") + tkinter.Button( + image=up_photo, command=lambda: times("second", "+"), font=("宋体", 30) + ).grid(column=2, row=0, sticky="nsew") + tkinter.Button( + image=down_photo, + command=lambda: times("hour", "-"), + font=("宋体", 30), + height=60, + ).grid(column=0, row=2, sticky="nsew") + tkinter.Button( + image=down_photo, command=lambda: times("minute", "-"), font=("宋体", 30) + ).grid(column=1, row=2, sticky="nsew") + tkinter.Button( + image=down_photo, command=lambda: times("second", "-"), font=("宋体", 30) + ).grid(column=2, row=2, sticky="nsew") + tkinter.Label(text=str(hour).zfill(2), font=("宋体", 50)).grid( + column=0, row=1, sticky="nsew" + ) + tkinter.Label(text=str(minute).zfill(2), font=("宋体", 50)).grid( + column=1, row=1, sticky="nsew" + ) + tkinter.Label(text=str(second).zfill(2), font=("宋体", 50)).grid( + column=2, row=1, sticky="nsew" + ) + starttime = tkinter.Button( + image=star_photo, command=lambda: start(), font=("宋体", 30), height=60 + ) + starttime.grid(column=0, row=3, columnspan=2, sticky="nsew") + back = tkinter.Button( + image=bigback_photo, + command=lambda: schedule("fromclean"), + font=("宋体", 30), + ) + back.grid(column=2, row=3, sticky="nsew") root.mainloop() + welcome() @@ -471,41 +730,45 @@ def reset_grid_configurations(root): for col in range(5): root.grid_columnconfigure(col, weight=0, minsize=0) + def check_homework(): work = [] - copylist = '' - subjects = open('support/subjects', 'r').read().splitlines() # 读取文件并分割成行 + copylist = "" + subjects = open("support/subjects", "r").read().splitlines() # 读取文件并分割成行 for i, subject in enumerate(subjects): - if str(d.date()) + subject in os.listdir('support/homework/'): - with open('support/homework/' + str(d.date()) + subject, 'r+') as f: - work.append(subject + ':') + if str(d.date()) + subject in os.listdir("support/homework/"): + with open("support/homework/" + str(d.date()) + subject, "r+") as f: + work.append(subject + ":") copylist = copylist + subject l = 1 for x in f.readlines(): work.append(x) if "——" in x: - copylist = copylist + x.split('——')[1] + copylist = copylist + x.split("——")[1] else: - copylist = copylist + str(l) + ')' + x + copylist = copylist + str(l) + ")" + x l = l + 1 return copylist -def homework(pas=None, window=None,line=9999): - global z,toplevel,back_photo,speed - z=True - if window==lo: + + +def homework(pas=None, window=None, line=9999): + global z, toplevel, back_photo, speed + z = True + if window == lo: for child in root.grid_slaves(): - cc=child.grid_info() - if cc['column']==1 and cc['row']==line-1: + cc = child.grid_info() + if cc["column"] == 1 and cc["row"] == line - 1: child.grid_remove() - zxs = tkinter.Label(root, text=pas[0], font=('华文行楷', 40)) - zxs.grid(column=1, row=line-1) + zxs = tkinter.Label(root, text=pas[0], font=("华文行楷", 40)) + zxs.grid(column=1, row=line - 1) reset_grid_configurations(window) - style.configure('TButton', font=('微软雅黑', 10)) - if window!=root: + style.configure("TButton", font=("微软雅黑", 10)) + if window != root: window.configure(width=300) + def ex(): - if window==lo: - schedule('fromhomework') + if window == lo: + schedule("fromhomework") else: for child in right_area.grid_slaves(): child.grid_remove() @@ -513,6 +776,7 @@ def homework(pas=None, window=None,line=9999): t.destroy() schedule_for_view() right_area.configure(width=55) + def schedule_for_view(): global right_area for btn in right_area.place_slaves(): @@ -525,36 +789,49 @@ def homework(pas=None, window=None,line=9999): excel = xlrd.open_workbook("support/课程表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index(zhou[d.weekday()]) # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index( + zhou[d.weekday()] + ) # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 except: - listindes = '没有找到课程表文件' - log('课程表文件不存在', 'error') + listindes = "没有找到课程表文件" + log("课程表文件不存在", "error") # 遍历该列所有的内容 - zxs = tkinter.Label(right_area, text='曾', font=('华文行楷', 40)) + zxs = tkinter.Label(right_area, text="曾", font=("华文行楷", 40)) zxs.grid(column=0, row=0) window.update() he = zxs.winfo_height() wi = zxs.winfo_width() zxs.destroy() - style.configure('TButton', font=('华文行楷', 40)) + style.configure("TButton", font=("华文行楷", 40)) for i in range(1, len(listindes)): - if listindes[i] == '上操': - zxs = tkinter.Label(right_area, image=sport_photo, font=('华文行楷', 40)) - elif listindes[i] == '眼操': - zxs = tkinter.Label(right_area, image=eye_photo, font=('华文行楷', 40)) - elif listindes[i] == '吃饭': - zxs = tkinter.Label(right_area, image=line_photo, font=('华文行楷', 40)) - elif listindes[i] == '升旗': - zxs = tkinter.Label(right_area, image=flag_photo, font=('华文行楷', 40)) - elif '/' not in listindes[i]: + if listindes[i] == "上操": + zxs = tkinter.Label( + right_area, image=sport_photo, font=("华文行楷", 40) + ) + elif listindes[i] == "眼操": + zxs = tkinter.Label(right_area, image=eye_photo, font=("华文行楷", 40)) + elif listindes[i] == "吃饭": + zxs = tkinter.Label(right_area, image=line_photo, font=("华文行楷", 40)) + elif listindes[i] == "升旗": + zxs = tkinter.Label(right_area, image=flag_photo, font=("华文行楷", 40)) + elif "/" not in listindes[i]: window.grid_rowconfigure(i - 1, weight=1) zxs = tkinter.Frame(right_area, height=he, width=wi) - ttk.Button(zxs, text=listindes[i][0], - command=lambda listindes=listindes[i],g=i: homework(pas=listindes,window=right_area, line=g), - style='light.TButton').place(relx=0.5, rely=0.5, anchor='center') # 使用 lambda 函数打印按钮的文本 + ttk.Button( + zxs, + text=listindes[i][0], + command=lambda listindes=listindes[i], g=i: homework( + pas=listindes, window=right_area, line=g + ), + style="light.TButton", + ).place( + relx=0.5, rely=0.5, anchor="center" + ) # 使用 lambda 函数打印按钮的文本 else: - zxs = tkinter.Label(right_area, text=listindes[i], font=('华文行楷', 20)) + zxs = tkinter.Label( + right_area, text=listindes[i], font=("华文行楷", 20) + ) zxs.grid(column=0, row=i) right_area.grid_rowconfigure(i, weight=1) window.update() @@ -566,29 +843,35 @@ def homework(pas=None, window=None,line=9999): for t in too.place_slaves(): t.destroy() - ppp = tkinter.Text(too,font=('黑体',24)) + ppp = tkinter.Text(too, font=("黑体", 24)) window.update() - co=tkinter.Text(too, width=ppp.cget("width"),font=('黑体',36)) + co = tkinter.Text(too, width=ppp.cget("width"), font=("黑体", 36)) co.focus_set() co.insert("insert", con) - co.grid(row=0, column=0, sticky='nsew') - button = tkinter.Button(too, image=tick_photo, command=lambda: pasd(co.get(1.0,END).strip())) # 使用 lambda 函数打印按钮的文本 - button.place(rely=0, relx=0.5, anchor='n') + co.grid(row=0, column=0, sticky="nsew") + button = tkinter.Button( + too, image=tick_photo, command=lambda: pasd(co.get(1.0, END).strip()) + ) # 使用 lambda 函数打印按钮的文本 + button.place(rely=0, relx=0.5, anchor="n") window.update() + def look(): global cross_photo for child in window.grid_slaves(): child.grid_remove() for t in window.place_slaves(): t.destroy() + def secure(): - pasd('') + pasd("") + secure() + def pasd(copylist): - global too,right_area,nodrag - nodrag=True - if copylist=='' or copylist =='refresh': - if copylist=='': + global too, right_area, nodrag + nodrag = True + if copylist == "" or copylist == "refresh": + if copylist == "": for child in window.grid_slaves(): child.grid_remove() for t in window.place_slaves(): @@ -608,88 +891,118 @@ def homework(pas=None, window=None,line=9999): xxx = xxx - step_x yyy = yyy - step_y window.geometry( - '{}x{}+{}+{}'.format(int(wid), int(hei), int(xxx), int(yyy))) + "{}x{}+{}+{}".format(int(wid), int(hei), int(xxx), int(yyy)) + ) window.update() - window.geometry( - '{}x{}+{}+{}'.format(screen_width, screen_height, 0, 0)) + window.geometry("{}x{}+{}+{}".format(screen_width, screen_height, 0, 0)) window.grid_rowconfigure(0, weight=1) too = tkinter.Frame(window) - too.grid(column=0, row=0, sticky='nsew') + too.grid(column=0, row=0, sticky="nsew") right_area = tkinter.Frame(window, height=screen_height) - right_area.grid(row=0, column=1, sticky='nsew') + right_area.grid(row=0, column=1, sticky="nsew") window.grid_rowconfigure(0, weight=1) # too 所在的列 window.grid_columnconfigure(0, weight=1) # too 所在的列 - window.grid_columnconfigure(1, minsize=55, weight=0) # right_area 所在的列,固定宽度 + window.grid_columnconfigure( + 1, minsize=55, weight=0 + ) # right_area 所在的列,固定宽度 right_area.configure(width=55) schedule_for_view() - elif copylist == 'refresh': + elif copylist == "refresh": for child in too.grid_slaves(): child.grid_remove() for t in too.place_slaves(): t.destroy() - copylist=check_homework() - pyperclip.copy(str(d.date())+'\n'+copylist) + copylist = check_homework() + pyperclip.copy(str(d.date()) + "\n" + copylist) doc = Document() # 这里相当于输入了一个空格,后面等待着文字输入 paragraph3 = doc.add_paragraph() - paragraph3.add_run('请勿在此处更改,不会被保存。\n'+copylist) + paragraph3.add_run("请勿在此处更改,不会被保存。\n" + copylist) try: - doc.save('support/' + str(d.date()) + '作业.docx') + doc.save("support/" + str(d.date()) + "作业.docx") except: - on_button_click('请将word窗口关闭','') + on_button_click("请将word窗口关闭", "") window.update() else: for child in too.grid_slaves(): child.grid_remove() for t in too.place_slaves(): t.destroy() - tkinter.Label(too, text=' ', font=('黑体', 24), - wraplength=root.winfo_width()).grid(column=0, row=0, sticky='nsew') + tkinter.Label( + too, + text=" ", + font=("黑体", 24), + wraplength=root.winfo_width(), + ).grid(column=0, row=0, sticky="nsew") root.update() - ly=tkinter.Label(too, text=str(d.date())+' '+zhou[d.weekday()], font=('黑体', 24), wraplength=root.winfo_width()) - ly.grid(column=0, row=0,sticky='nsew') + ly = tkinter.Label( + too, + text=str(d.date()) + " " + zhou[d.weekday()], + font=("黑体", 24), + wraplength=root.winfo_width(), + ) + ly.grid(column=0, row=0, sticky="nsew") root.update() - lp=tkinter.Label(too, text=copylist, font=('黑体', 36), anchor='w', justify='left',wraplength=root.winfo_width()-55) - lp.grid(column=0, row=1, ipadx=50,sticky='nsew') - adjust_font_size(lp, max_height=root.winfo_height()-ly.winfo_height()) + lp = tkinter.Label( + too, + text=copylist, + font=("黑体", 36), + anchor="w", + justify="left", + wraplength=root.winfo_width() - 55, + ) + lp.grid(column=0, row=1, ipadx=50, sticky="nsew") + adjust_font_size(lp, max_height=root.winfo_height() - ly.winfo_height()) zzz = tkinter.Frame(too) - lz = tkinter.Button(zzz, text='→←', command=lambda: schedule('fromhomework')) - lz.grid(column=0, row=0, sticky='nsew') - lf = tkinter.Button(zzz, text='复制', command=lambda: copy(zzz)) - lf.grid(column=1, row=0, sticky='nsew') + lz = tkinter.Button(zzz, text="→←", command=lambda: schedule("fromhomework")) + lz.grid(column=0, row=0, sticky="nsew") + lf = tkinter.Button(zzz, text="复制", command=lambda: copy(zzz)) + lf.grid(column=1, row=0, sticky="nsew") li = tkinter.Button(zzz, image=pen_photo, command=lambda: edit(copylist)) - li.grid(column=2, row=0, sticky='nsew') - zzz.grid(column=0, row=2, sticky='nsew') + li.grid(column=2, row=0, sticky="nsew") + zzz.grid(column=0, row=2, sticky="nsew") zzz.grid_columnconfigure(0, weight=1) # too 所在的列 zzz.grid_columnconfigure(1, weight=1) # too 所在的列 zzz.grid_columnconfigure(2, weight=1) # too 所在的列 too.grid_rowconfigure(1, weight=1) # too 所在的列 window.update() + def add_subject(a): - with open('support/subjects', 'r+') as h: - if a+'\n' in h.readlines(): - tkinter.messagebox.showwarning('已存在',a+'已存在') + with open("support/subjects", "r+") as h: + if a + "\n" in h.readlines(): + tkinter.messagebox.showwarning("已存在", a + "已存在") h.close() - elif a == '': + elif a == "": return False else: - with open('support/subjects', 'a+') as g: - g.write(str(a) + '\n') + with open("support/subjects", "a+") as g: + g.write(str(a) + "\n") g.close() choice_book(a) - def edit_homework(sub,subject,book,line): + + def edit_homework(sub, subject, book, line): for child in window.grid_slaves(): - if child.grid_info()['row']==line: + if child.grid_info()["row"] == line: child.grid_remove() - ppp = tkinter.Text(window,height=2,) + ppp = tkinter.Text( + window, + height=2, + ) ppp.focus_set() ppp.insert("insert", subject) - ppp.bind('', handle_return) + ppp.bind("", handle_return) ppp.grid(row=line, column=0, ipadx=30, padx=10) - button = tkinter.Button(window, image=tick_photo,command=lambda : rewrite_homework(sub, subject, book,ppp.get(1.0,END).strip())) # 使用 lambda 函数打印按钮的文本 + button = tkinter.Button( + window, + image=tick_photo, + command=lambda: rewrite_homework( + sub, subject, book, ppp.get(1.0, END).strip() + ), + ) # 使用 lambda 函数打印按钮的文本 button.grid(row=line, column=2, ipadx=1, pady=5) # 假设你只使用一列 - def rewrite_homework(sub,subject,book,content): - with open('support/homework/'+str(d.date())+sub, 'r') as file: + + def rewrite_homework(sub, subject, book, content): + with open("support/homework/" + str(d.date()) + sub, "r") as file: lines = file.readlines() # 遍历每一行,检查是否有内容为”123“的行 for i, line in enumerate(lines): @@ -697,25 +1010,27 @@ def homework(pas=None, window=None,line=9999): # 如果有,删除这一行 del lines[i] break - lines.append(content+'\n') - with open('support/homework/'+str(d.date())+sub, 'w') as file: + lines.append(content + "\n") + with open("support/homework/" + str(d.date()) + sub, "w") as file: file.writelines(lines) - if window!=lo: - pasd('refresh') - add_work(sub,book) - def add_work_write(sub,book,info): - with open('support/homework/'+str(d.date())+sub,'a+') as f: - f.write(book+info+'\n') + if window != lo: + pasd("refresh") + add_work(sub, book) + + def add_work_write(sub, book, info): + with open("support/homework/" + str(d.date()) + sub, "a+") as f: + f.write(book + info + "\n") pass try: window.update() - add_work(sub,book) + add_work(sub, book) except: pass - if window!=lo: - pasd('refresh') - def delete_homework(sub,subject,book): - with open('support/homework/'+str(d.date())+sub, 'r') as file: + if window != lo: + pasd("refresh") + + def delete_homework(sub, subject, book): + with open("support/homework/" + str(d.date()) + sub, "r") as file: lines = file.readlines() # 遍历每一行,检查是否有内容为”123“的行 @@ -726,17 +1041,18 @@ def homework(pas=None, window=None,line=9999): break # 将修改后的内容写回文件 - with open('support/homework/'+str(d.date())+sub, 'w') as file: + with open("support/homework/" + str(d.date()) + sub, "w") as file: file.writelines(lines) - if window!=lo: - pasd('refresh') - add_work(sub,book) + if window != lo: + pasd("refresh") + add_work(sub, book) def handle_return(event): - if event.keysym == 'Return': - homework_input_box.insert(END,'\n——') - return 'break' - def add_work(sub,book): + if event.keysym == "Return": + homework_input_box.insert(END, "\n——") + return "break" + + def add_work(sub, book): window.grid_columnconfigure(0, weight=1) global cross_photo for child in window.grid_slaves(): @@ -744,145 +1060,253 @@ def homework(pas=None, window=None,line=9999): for t in window.place_slaves(): t.destroy() try: - subjects = open('support/homework/'+str(d.date())+sub, 'r+').read().splitlines() # 读取文件并分割成行 + subjects = ( + open("support/homework/" + str(d.date()) + sub, "r+") + .read() + .splitlines() + ) # 读取文件并分割成行 except: - with open('support/homework/'+str(d.date())+sub, 'w+') as f: + with open("support/homework/" + str(d.date()) + sub, "w+") as f: pass - subjects = open('support/homework/'+str(d.date())+sub, 'r+').read().splitlines() - i=2 + subjects = ( + open("support/homework/" + str(d.date()) + sub, "r+") + .read() + .splitlines() + ) + i = 2 for i, subject in enumerate(subjects): - button = tkinter.Label(window, text=subject,justify='left',wraplength=160) # 使用 lambda 函数打印按钮的文本 - button.grid(row=i + 1, column=0, ipadx=50, pady=5,sticky='w') # 假设你只使用一列 - button = tkinter.Button(window, image=pen_photo, - command=lambda subject=subject, i=i+1: edit_homework(sub, subject, - book,i)) # 使用 lambda 函数打印按钮的文本 + button = tkinter.Label( + window, text=subject, justify="left", wraplength=160 + ) # 使用 lambda 函数打印按钮的文本 + button.grid( + row=i + 1, column=0, ipadx=50, pady=5, sticky="w" + ) # 假设你只使用一列 + button = tkinter.Button( + window, + image=pen_photo, + command=lambda subject=subject, i=i + 1: edit_homework( + sub, subject, book, i + ), + ) # 使用 lambda 函数打印按钮的文本 button.grid(row=i + 1, column=1, ipadx=1, pady=5) # 假设你只使用一列 - button = tkinter.Button(window, image=cross_photo,command=lambda subject=subject: delete_homework(sub,subject,book),bg='#4472c4',activebackground='#4472c4',fg='white') # 使用 lambda 函数打印按钮的文本 + button = tkinter.Button( + window, + image=cross_photo, + command=lambda subject=subject: delete_homework(sub, subject, book), + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) # 使用 lambda 函数打印按钮的文本 button.grid(row=i + 1, column=2, ipadx=1, pady=5) # 假设你只使用一列 - def confirm(sub,book,content): - if content=='': + def confirm(sub, book, content): + if content == "": choice_book(sub) else: for child in window.grid_slaves(): child.grid_remove() for t in window.place_slaves(): t.destroy() - leb = tkinter.Message(window, - text='是否保存更改?\n内容:\n\n'+sub+':'+book+content, - font=('仿宋', 24)) - leb.grid(column=0, row=0,sticky='nsew',columnspan=2) - tkinter.Button(text='保存', command=lambda:add_work_write(sub,book,homework_input_box.get(1.0,END).strip()), font=('宋体', 30)).grid(column=0, row=1, - sticky='nsew') - tkinter.Button(text='不保存', command=lambda:choice_book(sub), font=('宋体', 30)).grid(column=1, row=1, - sticky='nsew') - #tkinter.Button(window, image=back_photo, command=lambda: confirm()choice_book(sub),bg='#4472c4',activebackground='#4472c4',fg='white').place(relx=0, rely=0,anchor='nw') - tkinter.Button(window, image=back_photo, command=lambda: confirm(sub,book,homework_input_box.get(1.0,END).strip()),bg='#4472c4',activebackground='#4472c4',fg='white').place(relx=0, rely=0,anchor='nw') - tkinter.Label(window, text=sub+' '+book+'\n' +'请输入具体页数或题号').grid(row=0, column=0, ipadx=15, pady=10, columnspan=3) + leb = tkinter.Message( + window, + text="是否保存更改?\n内容:\n\n" + sub + ":" + book + content, + font=("仿宋", 24), + ) + leb.grid(column=0, row=0, sticky="nsew", columnspan=2) + tkinter.Button( + text="保存", + command=lambda: add_work_write( + sub, book, homework_input_box.get(1.0, END).strip() + ), + font=("宋体", 30), + ).grid(column=0, row=1, sticky="nsew") + tkinter.Button( + text="不保存", command=lambda: choice_book(sub), font=("宋体", 30) + ).grid(column=1, row=1, sticky="nsew") + + # tkinter.Button(window, image=back_photo, command=lambda: confirm()choice_book(sub),bg='#4472c4',activebackground='#4472c4',fg='white').place(relx=0, rely=0,anchor='nw') + tkinter.Button( + window, + image=back_photo, + command=lambda: confirm( + sub, book, homework_input_box.get(1.0, END).strip() + ), + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ).place(relx=0, rely=0, anchor="nw") + tkinter.Label( + window, text=sub + " " + book + "\n" + "请输入具体页数或题号" + ).grid(row=0, column=0, ipadx=15, pady=10, columnspan=3) global homework_input_box - homework_input_box = tkinter.Text(window, height=20,) + homework_input_box = tkinter.Text( + window, + height=20, + ) homework_input_box.focus_set() - homework_input_box.bind('', handle_return) - homework_input_box.grid(row=i+2, column=0,columnspan=3, sticky='nsew',padx=10) - ttk.Button(window, image=continued_photo, command=lambda: add_work_write(sub,book,homework_input_box.get(1.0,END).strip()),style='light.TButton').grid(row=i+4, - column=0, - ipadx=15, pady=10) - #tkinter.Button(window, text='回车可用(点此阅读回车说明)',command=lambda :tkinter.messagebox.showinfo('回车使用方法','按下回车后自动在下一行添加破折号“——”,破折号不会在最终页面中显示,仅代表新一行仍属于本项作业,不会被标号。\n如果手动删除某行的破折号,则该行将被认为是新一项作业,并顺序标号。\n可手动添加破折号,代表该行不会被标号。')).grid(row=i+3, column=0, ipadx=15, pady=10, columnspan=3) - tkinter.Button(window, image=cross_photo, command=lambda: ex()).place(relx=1, rely=0, anchor='ne') - def add_book(sub,book): - with open('support/' + sub, 'r+') as f: - if book == '': + homework_input_box.bind("", handle_return) + homework_input_box.grid( + row=i + 2, column=0, columnspan=3, sticky="nsew", padx=10 + ) + ttk.Button( + window, + image=continued_photo, + command=lambda: add_work_write( + sub, book, homework_input_box.get(1.0, END).strip() + ), + style="light.TButton", + ).grid(row=i + 4, column=0, ipadx=15, pady=10) + # tkinter.Button(window, text='回车可用(点此阅读回车说明)',command=lambda :tkinter.messagebox.showinfo('回车使用方法','按下回车后自动在下一行添加破折号“——”,破折号不会在最终页面中显示,仅代表新一行仍属于本项作业,不会被标号。\n如果手动删除某行的破折号,则该行将被认为是新一项作业,并顺序标号。\n可手动添加破折号,代表该行不会被标号。')).grid(row=i+3, column=0, ipadx=15, pady=10, columnspan=3) + tkinter.Button(window, image=cross_photo, command=lambda: ex()).place( + relx=1, rely=0, anchor="ne" + ) + + def add_book(sub, book): + with open("support/" + sub, "r+") as f: + if book == "": return False - elif book+'\n' in f.readlines(): - tkinter.messagebox.showwarning('已存在', book + '已存在') - elif len(open('support/' + sub, 'r+').read().splitlines())>=12: - tkinter.messagebox.showwarning('已达上限','最多添加12个常用书,删除功能还在测试,敬请期待。') + elif book + "\n" in f.readlines(): + tkinter.messagebox.showwarning("已存在", book + "已存在") + elif len(open("support/" + sub, "r+").read().splitlines()) >= 12: + tkinter.messagebox.showwarning( + "已达上限", "最多添加12个常用书,删除功能还在测试,敬请期待。" + ) else: - with open('support/' + sub, 'a+') as g: - g.write(book + '\n') + with open("support/" + sub, "a+") as g: + g.write(book + "\n") g.close() f.close() - add_work(sub,book) + add_work(sub, book) + def choice_book(sub): for child in window.grid_slaves(): child.grid_remove() for t in window.place_slaves(): t.destroy() try: - subjects = open('support/'+sub, 'r+').read().splitlines() # 读取文件并分割成行 + subjects = ( + open("support/" + sub, "r+").read().splitlines() + ) # 读取文件并分割成行 except: - with open('support/'+sub, 'w+') as f: - f.write('') + with open("support/" + sub, "w+") as f: + f.write("") f.close() - subjects = open('support/' + sub, 'r+').read().splitlines() - i=2 + subjects = open("support/" + sub, "r+").read().splitlines() + i = 2 - tkinter.Label(window, text='\n\n'+sub + '\n' + '选择或输入书名或卷名\n可将此栏目中的内容添加为常用书').grid(row=0, column=0, - ipadx=15, - pady=10,columnspan=2,sticky='nsew') + tkinter.Label( + window, + text="\n\n" + + sub + + "\n" + + "选择或输入书名或卷名\n可将此栏目中的内容添加为常用书", + ).grid(row=0, column=0, ipadx=15, pady=10, columnspan=2, sticky="nsew") for i, subject in enumerate(subjects): - button = tkinter.Button(window, text=subject, - command=lambda subject=subject: add_work(sub,subject),height=3,) # 使用 lambda 函数打印按钮的文本 - button.grid(row=i//2 + 1, column=i%2, pady=10,padx=10,sticky='nsew') # 假设你只使用一列 - tkinter.Button(window, image=back_photo, command=lambda: choice_subject()).place(relx=0, rely=0, - anchor='nw') + button = tkinter.Button( + window, + text=subject, + command=lambda subject=subject: add_work(sub, subject), + height=3, + ) # 使用 lambda 函数打印按钮的文本 + button.grid( + row=i // 2 + 1, column=i % 2, pady=10, padx=10, sticky="nsew" + ) # 假设你只使用一列 + tkinter.Button( + window, image=back_photo, command=lambda: choice_subject() + ).place(relx=0, rely=0, anchor="nw") ppp = tkinter.Entry(window, width=10) - ppp.grid(row=i + 2, column=0, ipadx=15,columnspan=3) - ttk.Button(window, image=save_and_continue_photo, command=lambda: add_book(sub,ppp.get()),style='light.TButton').grid(row=i + 3, column=0, - ipadx=15, pady=10,columnspan=2) - ttk.Button(window, image=continued_photo, command=lambda: add_work(sub,ppp.get()),style='light.TButton').grid(row=i + 4, - column=0, - ipadx=15, pady=10,columnspan=2) - tkinter.Button(window, image=cross_photo, command=lambda: ex()).place(relx=1, rely=0, anchor='ne') + ppp.grid(row=i + 2, column=0, ipadx=15, columnspan=3) + ttk.Button( + window, + image=save_and_continue_photo, + command=lambda: add_book(sub, ppp.get()), + style="light.TButton", + ).grid(row=i + 3, column=0, ipadx=15, pady=10, columnspan=2) + ttk.Button( + window, + image=continued_photo, + command=lambda: add_work(sub, ppp.get()), + style="light.TButton", + ).grid(row=i + 4, column=0, ipadx=15, pady=10, columnspan=2) + tkinter.Button(window, image=cross_photo, command=lambda: ex()).place( + relx=1, rely=0, anchor="ne" + ) window.update() pass + def window_close_handle(): - global z,toplevel - z=False + global z, toplevel + z = False window.destroy() try: toplevel.overrideredirect(1) except: pass + for x in window.place_slaves(): x.place_forget() for child in window.grid_slaves(): child.grid_remove() - if window==root: - window.protocol('WM_DELETE_WINDOW', window_close_handle) + if window == root: + window.protocol("WM_DELETE_WINDOW", window_close_handle) root.update() + def the(): for child in window.grid_slaves(): child.grid_remove() for t in window.place_slaves(): t.destroy() - tkinter.Button(window, image=cross_photo, command=lambda: ex()).place(relx=1, rely=0, anchor='ne') - tkinter.Button(window, image=back_photo, command=lambda: choice_subject()).place(relx=0, rely=0, anchor='nw') - tkinter.Label(window, text='\n\n名称').grid(column=0,row=0) - tkinter.Label(window, text='\n\n存活').grid(column=1, row=0) - tkinter.Label(window, text='\n\n目标').grid(column=2, row=0) - tkinter.Label(window, text='\n\n操作').grid(column=3, row=0) - a=2 + tkinter.Button(window, image=cross_photo, command=lambda: ex()).place( + relx=1, rely=0, anchor="ne" + ) + tkinter.Button( + window, image=back_photo, command=lambda: choice_subject() + ).place(relx=0, rely=0, anchor="nw") + tkinter.Label(window, text="\n\n名称").grid(column=0, row=0) + tkinter.Label(window, text="\n\n存活").grid(column=1, row=0) + tkinter.Label(window, text="\n\n目标").grid(column=2, row=0) + tkinter.Label(window, text="\n\n操作").grid(column=3, row=0) + a = 2 for thread in threading.enumerate(): tkinter.Label(window, text=thread.getName()).grid(column=0, row=a) tkinter.Label(window, text=thread.is_alive()).grid(column=1, row=a) # 检查线程是否有 target 属性,并获取其名称(而不是尝试调用它) - if hasattr(thread, 'target'): - target_name = thread.target.__name__ if callable(thread.target) else str(thread.target) + if hasattr(thread, "target"): + target_name = ( + thread.target.__name__ + if callable(thread.target) + else str(thread.target) + ) target_label = tkinter.Label(window, text=target_name) else: - target_label = tkinter.Label(window, text="None") # 对于没有 target 的线程,显示 "None" + target_label = tkinter.Label( + window, text="None" + ) # 对于没有 target 的线程,显示 "None" target_label.grid(column=2, row=a) if thread.is_alive(): - tkinter.Button(window, text='停止',command=lambda :tkinter.messagebox.showwarning('','暂不支持此功能')).grid(column=3, row=a) + tkinter.Button( + window, + text="停止", + command=lambda: tkinter.messagebox.showwarning( + "", "暂不支持此功能" + ), + ).grid(column=3, row=a) else: try: - tkinter.Button(window, text='启动', command=lambda: tkinter.messagebox.showwarning('','暂不支持此功能')).grid(column=3, row=a) + tkinter.Button( + window, + text="启动", + command=lambda: tkinter.messagebox.showwarning( + "", "暂不支持此功能" + ), + ).grid(column=3, row=a) except Exception as e: - tkinter.messagebox.showwarning('', str(e)) - a=a+1 - tkinter.Label(window, text='v24.10.28 ©曾祥盛').grid(column=0, row=a+1,columnspan=4) + tkinter.messagebox.showwarning("", str(e)) + a = a + 1 + tkinter.Label(window, text="v24.10.28 ©曾祥盛").grid( + column=0, row=a + 1, columnspan=4 + ) def choice_subject(sub=None): window.grid_rowconfigure(1, weight=0) @@ -894,43 +1318,82 @@ def homework(pas=None, window=None,line=9999): child.grid_remove() for t in window.place_slaves(): t.destroy() - subjects = open('support/subjects', 'r').read().splitlines() # 读取文件并分割成行 - tkinter.Label(window, text='请选择科目').grid(row=0, column=0, pady=10, columnspan=2, sticky='nsew') + subjects = ( + open("support/subjects", "r").read().splitlines() + ) # 读取文件并分割成行 + tkinter.Label(window, text="请选择科目").grid( + row=0, column=0, pady=10, columnspan=2, sticky="nsew" + ) for i, subject in enumerate(subjects): try: - button = ttk.Button(window, image=image_dict[subject],compound = "left",text=subject, - command=lambda subject=subject: choice_book(subject),style='light.TButton',) # 使用 lambda 函数打印按钮的文本 + button = ttk.Button( + window, + image=image_dict[subject], + compound="left", + text=subject, + command=lambda subject=subject: choice_book(subject), + style="light.TButton", + ) # 使用 lambda 函数打印按钮的文本 except: - button = ttk.Button(window, image=up_photo, compound="left", text=subject, - command=lambda subject=subject: choice_book(subject), - style='light.TButton', ) # 使用 lambda 函数打印按钮的文本 - button.grid(row=i//2 + 1, column=i%2,sticky='nsew',ipady=20) # 假设你只使用一列 + button = ttk.Button( + window, + image=up_photo, + compound="left", + text=subject, + command=lambda subject=subject: choice_book(subject), + style="light.TButton", + ) # 使用 lambda 函数打印按钮的文本 + button.grid( + row=i // 2 + 1, column=i % 2, sticky="nsew", ipady=20 + ) # 假设你只使用一列 ppp = tkinter.Entry(window, width=10) - ppp.grid(row=i + 2, column=0, ipadx=15,columnspan=2) - ttk.Button(window, image=continued_photo, command=lambda: add_subject(ppp.get()),style='light.TButton').grid(row=i + 3, column=0, - pady=10,columnspan=2) - tkinter.Button(window, image=cross_photo, command=lambda: ex()).place(relx=1, rely=0, anchor='ne') - tkinter.Button(window, text='thread', command=lambda: the()).place(relx=0, rely=1, anchor='sw') + ppp.grid(row=i + 2, column=0, ipadx=15, columnspan=2) + ttk.Button( + window, + image=continued_photo, + command=lambda: add_subject(ppp.get()), + style="light.TButton", + ).grid(row=i + 3, column=0, pady=10, columnspan=2) + tkinter.Button(window, image=cross_photo, command=lambda: ex()).place( + relx=1, rely=0, anchor="ne" + ) + tkinter.Button(window, text="thread", command=lambda: the()).place( + relx=0, rely=1, anchor="sw" + ) if sub != None: if sub in subjects: choice_book(sub) window.update() - if pas==True: - pasd('') + + if pas == True: + pasd("") elif pas != None: choice_subject(pas) else: choice_subject() + + def choice(fromwhere): - global info,canceltopping,zhou,h,d,photo,label_img,chosed,shouldnot,password,speed - root.wm_attributes('-topmost', 1) + global \ + info, \ + canceltopping, \ + zhou, \ + h, \ + d, \ + photo, \ + label_img, \ + chosed, \ + shouldnot, \ + password, \ + speed + root.wm_attributes("-topmost", 1) top.destroy() for btn in root.place_slaves(): btn.destroy() for x in root.grid_slaves(): x.grid_remove() root.overrideredirect(1) - if fromwhere=='fromschedule': + if fromwhere == "fromschedule": step_wid = (400 - root.winfo_width()) / speed step_hei = (root.winfo_height() - 300) / speed win_width = 400 @@ -938,136 +1401,171 @@ def choice(fromwhere): win_x = screen_width - win_width # 窗口右侧位置与显示屏右侧对齐 win_y = screen_height // 2 - win_height // 2 # 窗口垂直居中 step_x = ((screen_width - win_width) - root.winfo_x()) / speed - step_y = ((screen_height // 2 - win_height // 2)-root.winfo_y()) / speed + step_y = ((screen_height // 2 - win_height // 2) - root.winfo_y()) / speed for x in range(speed): wid = root.winfo_width() + step_wid hei = root.winfo_height() - step_hei root.geometry( - '{}x{}+{}+{}'.format(int(wid), int(hei), int(root.winfo_x() + step_x), int(root.winfo_y() + step_y))) + "{}x{}+{}+{}".format( + int(wid), + int(hei), + int(root.winfo_x() + step_x), + int(root.winfo_y() + step_y), + ) + ) root.update() - root.geometry('{}x{}+{}+{}'.format(win_width, win_height, win_x, win_y)) - elif fromwhere=='fromtab': + root.geometry("{}x{}+{}+{}".format(win_width, win_height, win_x, win_y)) + elif fromwhere == "fromtab": step_wid = (400 - root.winfo_width()) / speed step_hei = (root.winfo_height() - 300) / speed - step_x = root.winfo_x()/ speed - step_y = root.winfo_y()/ speed + step_x = root.winfo_x() / speed + step_y = root.winfo_y() / speed for x in range(speed): wid = root.winfo_width() + step_wid hei = root.winfo_height() - step_hei root.geometry( - '{}x{}+{}+{}'.format(int(wid), int(hei), int(root.winfo_x() - step_x), int(root.winfo_y() - step_y))) + "{}x{}+{}+{}".format( + int(wid), + int(hei), + int(root.winfo_x() - step_x), + int(root.winfo_y() - step_y), + ) + ) root.update() - root.geometry('{}x{}+{}+{}'.format(400, 300, 0, 0)) + root.geometry("{}x{}+{}+{}".format(400, 300, 0, 0)) root.update() - root.title('随机选人') + root.title("随机选人") global list list = [] - status = '开始' - back = tkinter.Button(text='返回', command=lambda: schedule('fromchoice'),font=('微软雅黑',10)) - back.place(relx=1, rely=0, anchor='ne') + status = "开始" + back = tkinter.Button( + text="返回", command=lambda: schedule("fromchoice"), font=("微软雅黑", 10) + ) + back.place(relx=1, rely=0, anchor="ne") verify = tkinter.Button(image=countdown_photo, command=lambda: countdown()) - verify.place(relx=0, rely=0, anchor='nw') + verify.place(relx=0, rely=0, anchor="nw") nolis = tkinter.StringVar() nolis.set(False) - lissss=ttk.Checkbutton(root, text="忽略已抽中列表",style="round-toggle",variable=nolis, onvalue=True, offvalue=False) - lissss.place(relx=0.5, rely=0, anchor='n') - #set = tkinter.Button(text='设置', command=lambda: settings(),bg='#4472c4',activebackground='#4472c4',fg='white') - #set.place(relx=0.5, rely=0, anchor='n') + lissss = ttk.Checkbutton( + root, + text="忽略已抽中列表", + style="round-toggle", + variable=nolis, + onvalue=True, + offvalue=False, + ) + lissss.place(relx=0.5, rely=0, anchor="n") + # set = tkinter.Button(text='设置', command=lambda: settings(),bg='#4472c4',activebackground='#4472c4',fg='white') + # set.place(relx=0.5, rely=0, anchor='n') root.update() - inn = tkinter.Label(text='正在处理……',font=('微软雅黑', 10)) - inn.place(relx=0.5, rely=0.5, anchor='center') - with open('support/record.txt','r') as k: + inn = tkinter.Label(text="正在处理……", font=("微软雅黑", 10)) + inn.place(relx=0.5, rely=0.5, anchor="center") + with open("support/record.txt", "r") as k: for re in k.readlines(): - if not re.strip('\n') in chosed: - chosed.append(re.strip('\n')) + if not re.strip("\n") in chosed: + chosed.append(re.strip("\n")) k.close() try: - with open('support/1.txt', 'r') as f: - for x in f.readlines(): - x = x.strip('\n') - list.append(x) - info = str(len(list)) - f.close() - with open('support/journal.log') as c: - jour=[] + with open("support/1.txt", "r") as f: + for x in f.readlines(): + x = x.strip("\n") + list.append(x) + info = str(len(list)) + f.close() + with open("support/journal.log") as c: + jour = [] for x in c.readlines(): jour.append(x) c.close() for x in range(len(jour) - 1, -1, -1): - if '当前有' in jour[x]: - file_name =jour[x].split('当前有')[1] - episode_name = file_name.split('人')[0] + if "当前有" in jour[x]: + file_name = jour[x].split("当前有")[1] + episode_name = file_name.split("人")[0] break - for y in range(len(jour)-1,-1,-1): - if '人名单sha256:' in jour[y]: - fi=jour[y].split('sha256:') + for y in range(len(jour) - 1, -1, -1): + if "人名单sha256:" in jour[y]: + fi = jour[y].split("sha256:") break - zz=file_sha256(r'support/1.txt')+'\n' + zz = file_sha256(r"support/1.txt") + "\n" try: try: if zz != fi[1]: if rest(): - on_button_click('人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。', - '') + on_button_click( + "人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。", + "", + ) elif not rest(): - on_button_click('人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。', - 'pppp') + on_button_click( + "人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。", + "pppp", + ) else: password = True except: - log('人名单sha256:' + file_sha256(r'support/1.txt'),'info') - password=True + log("人名单sha256:" + file_sha256(r"support/1.txt"), "info") + password = True except: pass - if (rest()) or (not rest() and password==True): - log('人名单sha256:'+file_sha256(r'support/1.txt'),'info') - log('当前有' + str(len(list)) + '人','info') - password=False + if (rest()) or (not rest() and password == True): + log("人名单sha256:" + file_sha256(r"support/1.txt"), "info") + log("当前有" + str(len(list)) + "人", "info") + password = False except Exception as e: - on_button_click('没有找到人名单文件或因\n'+str(e),'') - log('人名单文件不存在','info') - schedule('fromchoice') + on_button_click("没有找到人名单文件或因\n" + str(e), "") + log("人名单文件不存在", "info") + schedule("fromchoice") root.quit() try: - for z in range(len(jour)-1,-1,-1): - if '操作后sha256:' in jour[z]: - ooo=(jour[z].split('sha256:'))[1] + for z in range(len(jour) - 1, -1, -1): + if "操作后sha256:" in jour[z]: + ooo = (jour[z].split("sha256:"))[1] break - sha=file_sha256(r'support/record.txt')+'\n' + sha = file_sha256(r"support/record.txt") + "\n" try: if ooo != sha: if rest(): - on_button_click('抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。', '') + on_button_click( + "抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。", + "", + ) elif not rest(): - on_button_click('抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。','pppp') + on_button_click( + "抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。", + "pppp", + ) else: - password=True + password = True if (rest()) or (not rest() and password == True): - log('操作后sha256:' + file_sha256(r'support/record.txt'),'info') + log("操作后sha256:" + file_sha256(r"support/record.txt"), "info") password = False except: pass except: pass try: - with open('support/config.ini','r+') as file: + with open("support/config.ini", "r+") as file: for z in file.readlines(): - if '日志处理后sha256:' in jour[z]: - jourlog = (jour[z].split('sha256:'))[1] + if "日志处理后sha256:" in jour[z]: + jourlog = (jour[z].split("sha256:"))[1] break - sha = file_sha256(r'support/journal.log') + '\n' + sha = file_sha256(r"support/journal.log") + "\n" try: if jourlog != sha: if rest(): - on_button_click('日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。', - '') + on_button_click( + "日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。", + "", + ) elif not rest(): - on_button_click('日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。', - 'pppp') + on_button_click( + "日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。", + "pppp", + ) else: password = True if (rest()) or (not rest() and password == True): - log('', 'info') + log("", "info") password = False except: pass @@ -1075,37 +1573,72 @@ def choice(fromwhere): pass try: if int(episode_name) != len(list): - on_button_click('人名单中的人数\n与上次运行时不一致,\n请检查人名单是否被篡改。\n按确定以继续。','') + on_button_click( + "人名单中的人数\n与上次运行时不一致,\n请检查人名单是否被篡改。\n按确定以继续。", + "", + ) for i in set(list): if list.count(i) > 1: - if on_button_click('在人名单文件中,'+i+'出现了'+str(list.count(i))+'次,\n请检查人名单是否被篡改。\n重复的元素将会引发程序错误,\n在删除重复的元素之前请勿运行此模块。\n按确定以退出。',''): - schedule('fromchoice') + if on_button_click( + "在人名单文件中," + + i + + "出现了" + + str(list.count(i)) + + "次,\n请检查人名单是否被篡改。\n重复的元素将会引发程序错误,\n在删除重复的元素之前请勿运行此模块。\n按确定以退出。", + "", + ): + schedule("fromchoice") elif i in shouldnot: - on_button_click('人名单中出现不该出现的\n"'+i+'",\n请检查人名单是否被篡改。\n按确定以继续。','') + on_button_click( + '人名单中出现不该出现的\n"' + + i + + '",\n请检查人名单是否被篡改。\n按确定以继续。', + "", + ) except: pass + def stop(r): global flag, status, list, info, a, chosed, inf flag = True - status = '开始' + status = "开始" if not rest(): inf = tkinter.Label( - text='当前有' + info + '人。\n现在处于下课时间,抽到的人将不会添加到已抽中列表。',font=('微软雅黑', 10)) - elif str(nolis.get()) == '1': + text="当前有" + + info + + "人。\n现在处于下课时间,抽到的人将不会添加到已抽中列表。", + font=("微软雅黑", 10), + ) + elif str(nolis.get()) == "1": inf = tkinter.Label( - text='当前有' + info + '人。已忽略已抽中列表。\n抽到的人将不会添加到已抽中列表。',font=('微软雅黑', 10)) + text="当前有" + + info + + "人。已忽略已抽中列表。\n抽到的人将不会添加到已抽中列表。", + font=("微软雅黑", 10), + ) else: chosed.append(r) - log('本次抽中' + r,'info') - with open('support/record.txt','a+') as p: - p.write(r+'\n') + log("本次抽中" + r, "info") + with open("support/record.txt", "a+") as p: + p.write(r + "\n") p.close() - log('操作后sha256:'+file_sha256(r'support/record.txt'),'info') + log("操作后sha256:" + file_sha256(r"support/record.txt"), "info") inf = tkinter.Label( - text=str(len(chosed)) + '/' + info+'。剩余5人时将开启新一轮。',font=('微软雅黑', 10)) - inf.place(relx=0.5, rely=0.7, anchor='center') - start = tkinter.Button(text=status, command=lambda: main(), font=('宋体', 24), width=30,bg='#4472c4',activebackground='#4472c4',fg='white') - start.place(relx=0.5, rely=1, anchor='s') + text=str(len(chosed)) + "/" + info + "。剩余5人时将开启新一轮。", + font=("微软雅黑", 10), + ) + inf.place(relx=0.5, rely=0.7, anchor="center") + start = tkinter.Button( + text=status, + command=lambda: main(), + font=("宋体", 24), + width=30, + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + start.place(relx=0.5, rely=1, anchor="s") + def main(): global flag, root, list, status, info, a, chosed, inf try: @@ -1113,43 +1646,59 @@ def choice(fromwhere): except: pass flag = False - status = '就你了' - start = tkinter.Button(text=status, command=lambda: stop(list[r]), font=('宋体', 24), width=30,bg='#4472c4',activebackground='#4472c4',fg='white') - start.place(relx=0.5, rely=1, anchor='s') + status = "就你了" + start = tkinter.Button( + text=status, + command=lambda: stop(list[r]), + font=("宋体", 24), + width=30, + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + start.place(relx=0.5, rely=1, anchor="s") while not flag: r = random.randint(0, len(list) - 1) - if len(chosed) == len(list)-5: + if len(chosed) == len(list) - 5: chosed.clear() - with open('support/record.txt','a+')as g: + with open("support/record.txt", "a+") as g: g.truncate(0) g.close() - log('操作后sha256:' + file_sha256(r'support/record.txt'),'info') - if (list[r] not in chosed) and (int(nolis.get())==0): + log("操作后sha256:" + file_sha256(r"support/record.txt"), "info") + if (list[r] not in chosed) and (int(nolis.get()) == 0): try: a.destroy() except: pass - a = tkinter.Label(text=list[r], width=30, font=('华文行楷', 72)) - a.place(relx=0.5, rely=0.4, anchor='center') + a = tkinter.Label(text=list[r], width=30, font=("华文行楷", 72)) + a.place(relx=0.5, rely=0.4, anchor="center") root.update() time.sleep(0.01) - elif int(nolis.get())==1: + elif int(nolis.get()) == 1: try: a.destroy() except: pass - a = tkinter.Label(text=list[r], width=30, font=('华文行楷', 72)) - a.place(relx=0.5, rely=0.4, anchor='center') + a = tkinter.Label(text=list[r], width=30, font=("华文行楷", 72)) + a.place(relx=0.5, rely=0.4, anchor="center") root.update() time.sleep(0.01) - flag = False - status = '开始' - inn.destroy() - a = tkinter.Label(text='保持紧张', width=30, font=('华文行楷', 72)) - a.place(relx=0.5, rely=0.4, anchor='center') - start = tkinter.Button(text=status, command=lambda: main(), font=('宋体', 24), width=30,bg='#4472c4',activebackground='#4472c4',fg='white') - start.place(relx=0.5, rely=1, anchor='s') + flag = False + status = "开始" + inn.destroy() + a = tkinter.Label(text="保持紧张", width=30, font=("华文行楷", 72)) + a.place(relx=0.5, rely=0.4, anchor="center") + start = tkinter.Button( + text=status, + command=lambda: main(), + font=("宋体", 24), + width=30, + bg="#4472c4", + activebackground="#4472c4", + fg="white", + ) + start.place(relx=0.5, rely=1, anchor="s") def adjust_font_size(label, max_width=None, max_height=None, min_size=1): @@ -1191,24 +1740,45 @@ def adjust_font_size(label, max_width=None, max_height=None, min_size=1): text_width = label.winfo_reqwidth() text_height = label.winfo_reqheight() # 判断是否满足条件 - if (max_width is None or text_width <= label_width) and (max_height is None or text_height <= label_height): + if (max_width is None or text_width <= label_width) and ( + max_height is None or text_height <= label_height + ): break # 字体大小递减(避免无限循环) font_size -= 1 # 检查是否已达到最小字体大小 if font_size < min_size: - label.config(text='字数过多') - font_size=48 + label.config(text="字数过多") + font_size = 48 + + def copy(lg): - pyperclip.copy(str(d.date()) + '\n' + check_homework()) - lf=tkinter.Button(lg, image=tick_photo) - lf.grid(column=1, row=0, sticky='nsew') - root.after(5000,lambda :lf.destroy()) + pyperclip.copy(str(d.date()) + "\n" + check_homework()) + lf = tkinter.Button(lg, image=tick_photo) + lf.grid(column=1, row=0, sticky="nsew") + root.after(5000, lambda: lf.destroy()) + def schedule(fr): - global thu,other,zhou,d,canceltopping,photo,lose,hh,h,no,z,speed,nodrag,top,btn,lo - root.wm_attributes('-topmost', 0) + global \ + thu, \ + other, \ + zhou, \ + d, \ + canceltopping, \ + photo, \ + lose, \ + hh, \ + h, \ + no, \ + z, \ + speed, \ + nodrag, \ + top, \ + btn, \ + lo + root.wm_attributes("-topmost", 0) nodrag = False z = False for btn in root.place_slaves(): @@ -1216,138 +1786,175 @@ def schedule(fr): for btn in root.grid_slaves(): btn.grid_remove() reset_grid_configurations(root) - if lose==[]: + if lose == []: pass else: - a='缺少关键组件:\n' + a = "缺少关键组件:\n" for x in lose: - a=a+x+'\n' - on_button_click(a,'') - lose=[] + a = a + x + "\n" + on_button_click(a, "") + lose = [] if 1: step_wid = (359 - root.winfo_width()) / speed step_hei = (800 - root.winfo_height()) / speed - step_x = (root.winfo_x()-(screen_width - 359)) / speed + step_x = (root.winfo_x() - (screen_width - 359)) / speed step_y = (root.winfo_y() - 0) / speed - wid=root.winfo_width() - hei=root.winfo_height() - xxx=root.winfo_x() - yyy=root.winfo_y() + wid = root.winfo_width() + hei = root.winfo_height() + xxx = root.winfo_x() + yyy = root.winfo_y() # 移动窗口到指定位置,并有动画效果 for x in range(speed): wid = wid + step_wid hei = hei + step_hei - xxx=xxx - step_x - yyy=yyy - step_y - root.geometry( - '{}x{}+{}+{}'.format(int(wid), int(hei), int(xxx), int(yyy))) + xxx = xxx - step_x + yyy = yyy - step_y + root.geometry("{}x{}+{}+{}".format(int(wid), int(hei), int(xxx), int(yyy))) root.update() - root.geometry( - '{}x{}+{}+{}'.format(359, 800, screen_width - 359,0)) + root.geometry("{}x{}+{}+{}".format(359, 800, screen_width - 359, 0)) root.update() - root.title('课程表') + root.title("课程表") root.resizable(0, 0) root.overrideredirect(1) try: excel = xlrd.open_workbook("support/课程表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index(zhou[d.weekday()]) # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index( + zhou[d.weekday()] + ) # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 except: - on_button_click('请确认课程表文件\n存在且格式正确','') - log('课程表文件不存在','error') + on_button_click("请确认课程表文件\n存在且格式正确", "") + log("课程表文件不存在", "error") root.quit() # 遍历该列所有的内容 - style.configure('TButton', font=('华文行楷', 40)) - zxs = tkinter.Label(root, text='曾', font=('华文行楷', 40)) + style.configure("TButton", font=("华文行楷", 40)) + zxs = tkinter.Label(root, text="曾", font=("华文行楷", 40)) zxs.grid(column=1, row=0) root.update() - he=zxs.winfo_height() + he = zxs.winfo_height() wi = zxs.winfo_width() zxs.destroy() - lo=tkinter.Frame(root,width=300) + lo = tkinter.Frame(root, width=300) lo.grid_propagate(False) # 使用配置好的样式创建按钮 for i in range(1, len(listindes)): - if listindes[i]=='上操': - zxs = tkinter.Label(root, image=sport_photo, font=('华文行楷', 40)) - elif listindes[i]=='眼操': - zxs = tkinter.Label(root, image=eye_photo, font=('华文行楷', 40)) - elif listindes[i]=='吃饭': - zxs = tkinter.Label(root, image=line_photo, font=('华文行楷', 40)) - elif listindes[i]=='升旗': - zxs = tkinter.Label(root, image=flag_photo, font=('华文行楷', 40)) - elif '/' not in listindes[i]: - root.grid_rowconfigure(i-1, weight=1) - zxs=tkinter.Frame(root, height=he, width=wi) - ttk.Button(zxs, text=listindes[i][0], - command=lambda listindes=listindes[i],g=i:homework(pas=listindes,window=lo,line=g), - style='light.TButton').place(relx=0.5,rely=0.5,anchor='center') # 使用 lambda 函数打印按钮的文本 + if listindes[i] == "上操": + zxs = tkinter.Label(root, image=sport_photo, font=("华文行楷", 40)) + elif listindes[i] == "眼操": + zxs = tkinter.Label(root, image=eye_photo, font=("华文行楷", 40)) + elif listindes[i] == "吃饭": + zxs = tkinter.Label(root, image=line_photo, font=("华文行楷", 40)) + elif listindes[i] == "升旗": + zxs = tkinter.Label(root, image=flag_photo, font=("华文行楷", 40)) + elif "/" not in listindes[i]: + root.grid_rowconfigure(i - 1, weight=1) + zxs = tkinter.Frame(root, height=he, width=wi) + ttk.Button( + zxs, + text=listindes[i][0], + command=lambda listindes=listindes[i], g=i: homework( + pas=listindes, window=lo, line=g + ), + style="light.TButton", + ).place( + relx=0.5, rely=0.5, anchor="center" + ) # 使用 lambda 函数打印按钮的文本 else: - zxs = tkinter.Label(root,text=listindes[i], font=('华文行楷', 20)) - zxs.grid(column=1, row=i-1) + zxs = tkinter.Label(root, text=listindes[i], font=("华文行楷", 20)) + zxs.grid(column=1, row=i - 1) root.update() listindes.clear() - y = tkinter.Button(text=zhou[d.weekday()],command=lambda: choice('fromtab')) - y.grid(row=i,column=1,sticky='nsew') - global h,labeled + y = tkinter.Button(text=zhou[d.weekday()], command=lambda: choice("fromtab")) + y.grid(row=i, column=1, sticky="nsew") + global h, labeled root.grid_columnconfigure(0, weight=1) - lw=tkinter.Label(lo, text=str(d.date()),font=('微软雅黑',20)) - lw.grid(column=0, row=0, sticky='nsew') + lw = tkinter.Label(lo, text=str(d.date()), font=("微软雅黑", 20)) + lw.grid(column=0, row=0, sticky="nsew") root.update() - lo.grid(column=0, row=0, rowspan=i,sticky='nsew') - lj=tkinter.Label(lo, text=check_homework(), wraplength = root.winfo_width()-y.winfo_width(), font=('黑体',20),justify='left') - lj.grid(column=0, row=1, sticky='nsew') + lo.grid(column=0, row=0, rowspan=i, sticky="nsew") + lj = tkinter.Label( + lo, + text=check_homework(), + wraplength=root.winfo_width() - y.winfo_width(), + font=("黑体", 20), + justify="left", + ) + lj.grid(column=0, row=1, sticky="nsew") zzz = tkinter.Frame(root) - zzz.grid(column=0, row=i, sticky='nsew') + zzz.grid(column=0, row=i, sticky="nsew") zzz.grid_columnconfigure(0, weight=1) zzz.grid_columnconfigure(1, weight=1) - if fr!='fromhomework': + if fr != "fromhomework": top = tkinter.Toplevel() top.resizable(False, False) top.overrideredirect(True) - top.wm_attributes('-topmost', 1) + top.wm_attributes("-topmost", 1) try: - if type(check_class())==tuple: - btn = tkinter.Button(top, text=check_class()[0][0] + '→' + check_class()[1][0], - command=lambda: choice('fromtab'), font=('华文行楷', 20)) + if type(check_class()) == tuple: + btn = tkinter.Button( + top, + text=check_class()[0][0] + "→" + check_class()[1][0], + command=lambda: choice("fromtab"), + font=("华文行楷", 20), + ) else: - btn = tkinter.Button(top, text=check_class(), - command=lambda: choice('fromtab'), font=('华文行楷', 20)) + btn = tkinter.Button( + top, + text=check_class(), + command=lambda: choice("fromtab"), + font=("华文行楷", 20), + ) except TypeError: try: - btn = tkinter.Button(top, text=check_class()[0][0], - command=lambda: choice('fromtab'), font=('华文行楷', 20)) + btn = tkinter.Button( + top, + text=check_class()[0][0], + command=lambda: choice("fromtab"), + font=("华文行楷", 20), + ) except: - btn = tkinter.Button(top, image=choice_photo, - command=lambda: choice('fromtab'), font=('华文行楷', 20)) - btn.place(relx=0.5, rely=0.5, anchor='center') + btn = tkinter.Button( + top, + image=choice_photo, + command=lambda: choice("fromtab"), + font=("华文行楷", 20), + ) + btn.place(relx=0.5, rely=0.5, anchor="center") top.update() total_width = btn.winfo_width() total_height = btn.winfo_height() // 1.5 - top.geometry('{}x{}+{}+{}'.format(int(total_width)-2, int(total_height), 0, 0)) + top.geometry( + "{}x{}+{}+{}".format(int(total_width) - 2, int(total_height), 0, 0) + ) top.update() - lz=tkinter.Button(zzz, text='←→',command=lambda :homework(pas=True,window=root)) - lz.grid(column=0, row=0, sticky='nsew') - lf=tkinter.Button(zzz, text='复制',command=lambda :copy(zzz)) - lf.grid(column=1, row=0, sticky='nsew') - adjust_font_size(lj, max_height=800-he) + lz = tkinter.Button(zzz, text="←→", command=lambda: homework(pas=True, window=root)) + lz.grid(column=0, row=0, sticky="nsew") + lf = tkinter.Button(zzz, text="复制", command=lambda: copy(zzz)) + lf.grid(column=1, row=0, sticky="nsew") + adjust_font_size(lj, max_height=800 - he) root.update_idletasks() - root.wm_attributes('-topmost', 0) + root.wm_attributes("-topmost", 0) + + def check_resttime(): global zhou, d try: excel = xlrd.open_workbook("support/时刻表.xls") # 打开excel文件 sheet = excel.sheet_by_index(0) # 获取工作薄 rows: list = sheet.row_values(0) # 获取第一行的表头内容 - index = rows.index('时刻表') # 获取age列所在的列数: 1,也可以换成"password" + index = rows.index("时刻表") # 获取age列所在的列数: 1,也可以换成"password" listindes = sheet.col_values(index) # 获取age列的所有内容 for x in range(1, len(listindes)): - a = listindes[x].split('-') - start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[0], '%Y-%m-%d%H:%M') - end_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[1], '%Y-%m-%d%H:%M') + a = listindes[x].split("-") + start_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[0], "%Y-%m-%d%H:%M" + ) + end_time = datetime.datetime.strptime( + str(datetime.datetime.now().date()) + a[1], "%Y-%m-%d%H:%M" + ) now_time = datetime.datetime.now() if start_time < now_time < end_time: delta = end_time - now_time @@ -1356,76 +1963,109 @@ def check_resttime(): return 2400 except: return 2400 + + def count(): time.sleep(10) + def bsy(fro=None): global top - if fro==None: + if fro == None: time.sleep(10) - while type(check_class())==tuple: + while type(check_class()) == tuple: try: - btn.config(text=check_class()[0][0] + '→' + check_class()[1][0]) + btn.config(text=check_class()[0][0] + "→" + check_class()[1][0]) time.sleep(check_resttime() + 3) except tkinter.TclError: time.sleep(check_resttime() + 3) else: - if type(check_class())==str: + if type(check_class()) == str: btn.config(text=check_class()) else: - btn.config(text='',image=choice_photo) + btn.config(text="", image=choice_photo) top.update() total_width = btn.winfo_width() - total_height = btn.winfo_height()//1.5 - top.geometry('{}x{}+{}+{}'.format(total_width, int(total_height), 0, 0)) + total_height = btn.winfo_height() // 1.5 + top.geometry("{}x{}+{}+{}".format(total_width, int(total_height), 0, 0)) + def clean(): - global fin,a,ll,lose - ll='正在清理文件' - fin=False + global fin, a, ll, lose + ll = "正在清理文件" + fin = False a = 0 current_dir = os.getcwd() - uncommon_dir = os.path.join(current_dir, '不常用的文件') + uncommon_dir = os.path.join(current_dir, "不常用的文件") if not os.path.exists(uncommon_dir): os.mkdir(uncommon_dir) one_week_ago = datetime.datetime.now() - datetime.timedelta(days=7) for filename in os.listdir(current_dir): filepath = os.path.join(current_dir, filename) - ll='检查'+filepath - ll=filename - if filename == '不常用的文件': - ll = '跳过' + filename - elif filename == '文件归档.py' or filename=='loading.gif' or filename=='课程表.xls' or filename=='时间表.xls' or filename=='1.txt' or filename=='journal.log' or filename=='record.txt'or os.path.isdir(filepath) == 'support' or filename.endswith('.exe') or filename.endswith('.lnk') or filename.endswith('.ini') or ('nodelete' in filename) or ('support' in filename): - ll='跳过'+filename + ll = "检查" + filepath + ll = filename + if filename == "不常用的文件": + ll = "跳过" + filename + elif ( + filename == "文件归档.py" + or filename == "loading.gif" + or filename == "课程表.xls" + or filename == "时间表.xls" + or filename == "1.txt" + or filename == "journal.log" + or filename == "record.txt" + or os.path.isdir(filepath) == "support" + or filename.endswith(".exe") + or filename.endswith(".lnk") + or filename.endswith(".ini") + or ("nodelete" in filename) + or ("support" in filename) + ): + ll = "跳过" + filename elif os.path.getmtime(filepath) < one_week_ago.timestamp(): - ll='移动'+filename + ll = "移动" + filename try: shutil.move(filepath, os.path.join(uncommon_dir, filename)) - log('移动了'+filename,'info') + log("移动了" + filename, "info") except Exception as e: - log('移动'+str(filename)+'失败,因为'+str(e),'warning') + log("移动" + str(filename) + "失败,因为" + str(e), "warning") a = a + 1 else: - ll=filename+'未到过期时间' - ll='正在检查程序组件' - x=os.listdir('support') - list=['temp.txt','课程表.xls','时间表.xls','时刻表.xls','1.txt','journal.log','record.txt','config.ini'] - lose=[] + ll = filename + "未到过期时间" + ll = "正在检查程序组件" + x = os.listdir("support") + list = [ + "temp.txt", + "课程表.xls", + "时间表.xls", + "时刻表.xls", + "1.txt", + "journal.log", + "record.txt", + "config.ini", + ] + lose = [] for y in list: - ll='检查'+y + ll = "检查" + y if y in x: - ll='存在'+y + ll = "存在" + y else: - ll='缺少'+y + ll = "缺少" + y lose.append(y) - fin=True -speed=50 -nodrag=False -flag_flag=True -t1 = Thread(target=clean,name='clean') # 定义线程t1,线程任务为调用task1函数,task1函数的参数是6 -t2 = Thread(target=loading,name='main') # 定义线程t2,线程任务为调用task2函数,task2函数无参数 -t3 = Thread(target=bsy,name='bsy') + fin = True + + +speed = 50 +nodrag = False +flag_flag = True +t1 = Thread( + target=clean, name="clean" +) # 定义线程t1,线程任务为调用task1函数,task1函数的参数是6 +t2 = Thread( + target=loading, name="main" +) # 定义线程t2,线程任务为调用task2函数,task2函数无参数 +t3 = Thread(target=bsy, name="bsy") t1.start() # 开始运行t1线程 t2.start() # 开始运行t2线程 time.sleep(5) -t3.start() \ No newline at end of file +t3.start()