1654 lines
75 KiB
Python
1654 lines
75 KiB
Python
'''
|
||
你可能在这里看到一些匪夷所思的代码,因为有些已经没用的功能,还没来得及删。
|
||
bugs
|
||
“设置”是新加的内容,但问题很多,你可以试试。
|
||
“倒计时”的结束时间必须在今天,如果结束时间是第二天会立刻停止,知道原因,但没来得及改。
|
||
“查看并复制”如果一项作业太长,就会显示不全,也知道原因,但懒得改(毕竟可以看word)。
|
||
'''
|
||
'''
|
||
* _ooOoo_
|
||
* o8888888o
|
||
* 88" . "88
|
||
* (| -_- |)
|
||
* O\ = /O
|
||
* ____/`---'\____
|
||
* . ' \\| |// `.
|
||
* / \\||| : |||// \
|
||
* / _||||| -:- |||||- \
|
||
* | | \\\ - /// | |
|
||
* | \_| ''\---/'' | |
|
||
* \ .-\__ `-` ___/-. /
|
||
* ___`. .' /--.--\ `. . __
|
||
* ."" '< `.___\_<|>_/___.' >'"".
|
||
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
|
||
* \ \ `-. \_ __\ /__ _/ .-` / /
|
||
* ======`-.____`-.___\_____/___.-`____.-'======
|
||
* `=---='
|
||
*
|
||
* .............................................
|
||
* 万分感谢
|
||
'''
|
||
|
||
from threading import Thread
|
||
from tkinter import *
|
||
from arcade import load_sound, play_sound, stop_sound
|
||
import random, tkinter, time, xlrd, datetime, logging, hashlib, os, shutil, pygetwindow, pyperclip, requests, ctypes
|
||
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
|
||
try:
|
||
with open('support/config.ini') as v:
|
||
for x in v.readlines():
|
||
if 'pwd:' in x:
|
||
break
|
||
except:
|
||
on_button_click('没有找到密码文件', '')
|
||
pwd = 'pwd:' + pwd
|
||
if pwd == x:
|
||
password = True
|
||
return True
|
||
else:
|
||
on_button_click('请检查密码', '')
|
||
return False
|
||
|
||
|
||
def loading():
|
||
global fin, a, root, screen_width, ll, 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, check_photo, lock_photo, countdown_photo, sport_photo, eye_photo, line_photo, flag_photo, pen_photo, tick_photo, image_dict
|
||
fin = False
|
||
style = Style(theme='newtheme')
|
||
root = style.master
|
||
draggable_window = DraggableWindow(root)
|
||
content_frame = ttk.Frame(root)
|
||
screen_width = root.winfo_screenwidth()
|
||
root.resizable(0, 0)
|
||
root.overrideredirect(1)
|
||
for x in range(75):
|
||
win_width = (4 * x) + 201
|
||
win_height = (4 * x) + 1
|
||
win_x = root.winfo_screenwidth() // 2 - win_width // 2
|
||
win_y = root.winfo_screenheight() // 2 - win_height // 2
|
||
root.geometry('{}x{}+{}+{}'.format(win_width, win_height, win_x, win_y))
|
||
root.update()
|
||
log('正在清理文件', 'info')
|
||
while fin == False:
|
||
c = tkinter.Label(text=ll, font=('宋体'))
|
||
c.place(relx=0.5, rely=0.8, anchor='center')
|
||
time.sleep(0.08)
|
||
root.update_idletasks()
|
||
root.update()
|
||
c.destroy()
|
||
else:
|
||
try:
|
||
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')
|
||
root.update()
|
||
root.after(3000)
|
||
k.destroy()
|
||
k = tkinter.Label(text='正在检查时间炸弹', font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
root.update()
|
||
if str(d.date()) == '2023-11-26':
|
||
k.destroy()
|
||
k = tkinter.Label(text='时间炸弹已到时间\n正在尝试下载文件', font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
root.update()
|
||
try:
|
||
file = requests.get('http://shenjack.top:5100/people/what/raw/branch/main/wallpaper1.JPG')
|
||
open('support/wallpaper1.JPG', 'wb').write(file.content)
|
||
file = requests.get('http://shenjack.top:5100/people/what/raw/branch/main/wallpaper2.JPG')
|
||
open('support/wallpaper2.JPG', 'wb').write(file.content)
|
||
file = requests.get('http://shenjack.top:5100/people/what/raw/branch/main/wallpaper.pptx')
|
||
open('support/wallpaper.pptx', 'wb').write(file.content)
|
||
k.destroy()
|
||
k = tkinter.Label(text='下载文件成功', font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
root.update()
|
||
root.after(3000)
|
||
k.destroy()
|
||
k = tkinter.Label(text='正在替换壁纸', font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
ctypes.windll.user32.SystemParametersInfoW(20, 0, "C:/Users/dio/Desktop/实验/support/wallpaper2.JPG", 0)
|
||
except Exception as e:
|
||
k = tkinter.Label(text='替换壁纸失败\n因为' + str(e), font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
root.update()
|
||
else:
|
||
k.destroy()
|
||
k = tkinter.Label(text='时间炸弹未到时间', font=('宋体', 24))
|
||
k.place(relx=0.5, rely=0.5, anchor='center')
|
||
k.destroy()
|
||
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)
|
||
bigback = Image.open("support/bigback.png")
|
||
bigback = bigback.resize((40, 40))
|
||
bigback_photo = ImageTk.PhotoImage(bigback)
|
||
up = Image.open("support/up.png")
|
||
up = up.resize((40, 40))
|
||
up_photo = ImageTk.PhotoImage(up)
|
||
down = Image.open("support/down.png")
|
||
down = down.resize((40, 40))
|
||
down_photo = ImageTk.PhotoImage(down)
|
||
stop = Image.open("support/stop.png")
|
||
stop = stop.resize((40, 40))
|
||
stop_photo = ImageTk.PhotoImage(stop)
|
||
star = Image.open("support/star.png")
|
||
star = star.resize((40, 40))
|
||
star_photo = ImageTk.PhotoImage(star)
|
||
paus = Image.open("support/paus.png")
|
||
paus = paus.resize((40, 40))
|
||
paus_photo = ImageTk.PhotoImage(paus)
|
||
cross = Image.open("support/cross.png")
|
||
cross = cross.resize((20, 20))
|
||
cross_photo = ImageTk.PhotoImage(cross)
|
||
tick = Image.open("support/tick.png")
|
||
tick = tick.resize((20, 20))
|
||
tick_photo = ImageTk.PhotoImage(tick)
|
||
pen = Image.open("support/pen.png")
|
||
pen = pen.resize((20, 20))
|
||
pen_photo = ImageTk.PhotoImage(pen)
|
||
save_and_continue = Image.open("support/save_and_continue.png")
|
||
save_and_continue = save_and_continue.resize((120, 60))
|
||
save_and_continue_photo = ImageTk.PhotoImage(save_and_continue)
|
||
continued = Image.open("support/continue.png")
|
||
continued = continued.resize((120, 60))
|
||
continued_photo = ImageTk.PhotoImage(continued)
|
||
check = Image.open("support/check.png")
|
||
check = check.resize((50, 50))
|
||
check_photo = ImageTk.PhotoImage(check)
|
||
lock = Image.open("support/lock.png")
|
||
lock = lock.resize((200, 200))
|
||
lock_photo = ImageTk.PhotoImage(lock)
|
||
countdown = Image.open("support/countdown.png")
|
||
countdown = countdown.resize((40, 40))
|
||
countdown_photo = ImageTk.PhotoImage(countdown)
|
||
sport = Image.open("support/sport.png")
|
||
sport = sport.resize((60, 60))
|
||
sport_photo = ImageTk.PhotoImage(sport)
|
||
eye = Image.open("support/check.png")
|
||
eye = eye.resize((60, 60))
|
||
eye_photo = ImageTk.PhotoImage(eye)
|
||
line = Image.open("support/line.png")
|
||
line = line.resize((60, 5))
|
||
line_photo = ImageTk.PhotoImage(line)
|
||
flag = Image.open("support/flag.png")
|
||
flag = flag.resize((60, 60))
|
||
flag_photo = ImageTk.PhotoImage(flag)
|
||
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)
|
||
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)
|
||
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
|
||
root.after(3000, lambda: schedule('fromclean'))
|
||
root.mainloop()
|
||
|
||
|
||
def log(content, rate):
|
||
if rate == 'info':
|
||
logging.info(content)
|
||
elif rate == 'warning':
|
||
logging.warning(content)
|
||
elif rate == 'error':
|
||
logging.error(content)
|
||
else:
|
||
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]:
|
||
del f.readlines()[x]
|
||
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)
|
||
win_width = 400
|
||
win_height = 300
|
||
wait_window.overrideredirect(1)
|
||
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.wait_window()
|
||
return True
|
||
|
||
|
||
class DraggableWindow:
|
||
def __init__(self, root):
|
||
self.root = root
|
||
self.root.bind("<ButtonPress-1>", self.start_move)
|
||
self.root.bind("<ButtonRelease-1>", self.stop_move)
|
||
self.root.bind("<B1-Motion>", self.on_move)
|
||
self.draggable = False
|
||
self.offset = {"x": 0, "y": 0}
|
||
|
||
def start_move(self, event):
|
||
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
|
||
self.offset["y"] = event.y
|
||
|
||
def stop_move(self, event):
|
||
self.draggable = False
|
||
|
||
def on_move(self, event):
|
||
if isinstance(event.widget, tkinter.Button) or isinstance(event.widget, tkinter.Text) or isinstance(
|
||
event.widget, tkinter.Entry):
|
||
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
|
||
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)
|
||
|
||
|
||
def file_hash(file_path: str, hash_method) -> str:
|
||
h = hash_method()
|
||
with open(file_path, 'rb') as f:
|
||
while True:
|
||
b = f.read(8192)
|
||
if not b:
|
||
break
|
||
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
|
||
try:
|
||
excel = xlrd.open_workbook("support/时刻表.xls")
|
||
sheet = excel.sheet_by_index(0)
|
||
rows: list = sheet.row_values(0)
|
||
index = rows.index('时刻表')
|
||
listindes = sheet.col_values(index)
|
||
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')
|
||
now_time = datetime.datetime.now()
|
||
if start_time < now_time < end_time:
|
||
excel = xlrd.open_workbook("support/课程表.xls")
|
||
sheet = excel.sheet_by_index(0)
|
||
rows: list = sheet.row_values(0)
|
||
index = rows.index(zhou[d.weekday()])
|
||
listindes = sheet.col_values(index)
|
||
return listindes[x]
|
||
return False
|
||
except:
|
||
return False
|
||
|
||
|
||
def rest():
|
||
try:
|
||
excel = xlrd.open_workbook("support/时间表.xls")
|
||
sheet = excel.sheet_by_index(0)
|
||
rows: list = sheet.row_values(0)
|
||
index = rows.index('时间表')
|
||
listindes = sheet.col_values(index)
|
||
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')
|
||
now_time = datetime.datetime.now()
|
||
if start_time < now_time < end_time:
|
||
return True
|
||
return False
|
||
except:
|
||
return False
|
||
|
||
|
||
def verify_pwd():
|
||
global password
|
||
wait_window = tkinter.Toplevel(root)
|
||
win_width = 400
|
||
win_height = 300
|
||
wait_window.overrideredirect(1)
|
||
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="验证密码\n成功后可打开任务管理器", 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')
|
||
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()
|
||
if password == True:
|
||
with open('support/temp', 'w+') as f:
|
||
f.write('True')
|
||
|
||
password = False
|
||
return True
|
||
|
||
|
||
def urge():
|
||
global toplevel, pressed_f4
|
||
time.sleep(10)
|
||
pressed_f4 = False
|
||
subj = ['语文', '数学', '英语', '物理', '化学', '政治']
|
||
|
||
def do_exit():
|
||
global pressed_f4
|
||
if pressed_f4:
|
||
pressed_f4 = False
|
||
|
||
def alt_f4(event):
|
||
global pressed_f4
|
||
pressed_f4 = True
|
||
|
||
with open('support/info.txt', 'r+') as f:
|
||
for x in f.readlines():
|
||
if '晚自习' in x:
|
||
break
|
||
a = x.split(':')
|
||
toplevel = tkinter.Toplevel()
|
||
toplevel.geometry('{}x{}+{}+{}'.format(screen_width - 2, toplevel.winfo_screenheight() - 2, 0, 0))
|
||
toplevel.resizable(0, 0)
|
||
toplevel.overrideredirect(1)
|
||
toplevel.wm_attributes('-topmost', 1)
|
||
toplevel.protocol("WM_DELETE_WINDOW")
|
||
toplevel.bind('<Alt-F4>', alt_f4)
|
||
toplevel.protocol("WM_DELETE_WINDOW", do_exit)
|
||
toplevel.configure(bg='white')
|
||
toplevel.wm_attributes('-transparentcolor', 'white')
|
||
flag = True
|
||
while flag:
|
||
start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + a[1], '%Y-%m-%d%H:%M')
|
||
now_time = datetime.datetime.now()
|
||
while start_time < now_time and flag:
|
||
urg = []
|
||
subjects = open('support/subjects', 'r').read().splitlines()
|
||
for i, subject in enumerate(subjects):
|
||
if str(d.date()) + subject in os.listdir('support/homework/') and (not subject in urg):
|
||
with open('support/homework/' + str(d.date()) + subject, 'r+') as f:
|
||
if f.readlines() != []:
|
||
pass
|
||
elif subject in subj:
|
||
urg.append(subject)
|
||
else:
|
||
if (not subject in urg) and (subject in subj):
|
||
urg.append(subject)
|
||
for btn in toplevel.place_slaves():
|
||
btn.destroy()
|
||
for x in urg:
|
||
if z == False:
|
||
tkinter.Button(toplevel, text=x + '课代表速留作业', font=('宋体', 30), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').place(relx=random.uniform(0, 1),
|
||
rely=random.uniform(0, 1))
|
||
if urg == []:
|
||
flag = False
|
||
toplevel.update()
|
||
time.sleep(1)
|
||
else:
|
||
delta = start_time - now_time
|
||
seconds = delta.total_seconds()
|
||
time.sleep(seconds)
|
||
|
||
|
||
z = False
|
||
|
||
|
||
def countdown():
|
||
global speed
|
||
for btn in root.place_slaves():
|
||
btn.destroy()
|
||
|
||
def returnforpaused(whattime):
|
||
current_time = datetime.datetime.now().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
|
||
flag = False
|
||
pause = tkinter.Button(image=star_photo, command=lambda: updated(returnforpaused(whattime)), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white', font=('宋体', 30))
|
||
pause.grid(column=0, row=3, sticky='nsew')
|
||
|
||
def updated(future_time):
|
||
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]))
|
||
datetime1 = datetime.datetime.combine(datetime.date.today(), time1)
|
||
current_time = datetime.datetime.now().time()
|
||
pause = tkinter.Button(image=paus_photo, bg='#4472c4', activebackground='#4472c4', fg='white',
|
||
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, bg='#4472c4', activebackground='#4472c4', fg='white',
|
||
command=lambda: welcome(), font=('宋体', 30))
|
||
cancel.grid(column=1, row=3, sticky='nsew')
|
||
back = tkinter.Button(image=bigback_photo, bg='#4472c4', activebackground='#4472c4', fg='white',
|
||
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]))):
|
||
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')
|
||
root.update()
|
||
time.sleep(1)
|
||
else:
|
||
if flag == False:
|
||
pass
|
||
else:
|
||
finishing()
|
||
|
||
def finishing():
|
||
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')
|
||
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)
|
||
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 hour >= 23:
|
||
pass
|
||
else:
|
||
hour = hour + 1
|
||
elif way == '-':
|
||
if hour <= 0:
|
||
pass
|
||
else:
|
||
hour = hour - 1
|
||
elif unit == 'minute':
|
||
if way == '+':
|
||
if minute >= 59 and hour < 23:
|
||
hour = hour + 1
|
||
minute = minute % 59
|
||
elif minute >= 59 and hour >= 23:
|
||
pass
|
||
else:
|
||
minute = minute + 1
|
||
elif way == '-':
|
||
if minute <= 0:
|
||
pass
|
||
else:
|
||
minute = minute - 1
|
||
elif unit == 'second':
|
||
if way == '+':
|
||
if second >= 59 and minute < 59:
|
||
minute = minute + 1
|
||
second = second % 59
|
||
elif second >= 59 and minute >= 59 and hour < 23:
|
||
hour = hour + 1
|
||
second = second % 59
|
||
minute = minute % 59
|
||
elif second >= 59 and minute >= 59 and hour >= 23:
|
||
pass
|
||
else:
|
||
second = second + 1
|
||
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')
|
||
root.update()
|
||
|
||
root.grid_rowconfigure(1, weight=1)
|
||
root.grid_columnconfigure(0, weight=1)
|
||
root.grid_columnconfigure(1, weight=1)
|
||
root.grid_columnconfigure(2, weight=1)
|
||
step_wid = (500 - root.winfo_width()) / speed
|
||
step_hei = (300 - root.winfo_height()) / speed
|
||
step_x = (root.winfo_x() - (root.winfo_screenwidth() // 2 - 500 / 2)) / speed
|
||
step_y = (root.winfo_y() - (root.winfo_screenheight() // 2 - 300 / 2)) / 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)))
|
||
root.update()
|
||
root.geometry(
|
||
'{}x{}+{}+{}'.format(500, 300, int(root.winfo_screenwidth() // 2 - 500 / 2),
|
||
int(root.winfo_screenheight() // 2 - 300 / 2)))
|
||
def welcome():
|
||
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, bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').grid(column=0, row=0,
|
||
sticky='nsew')
|
||
tkinter.Button(image=up_photo, command=lambda: times('minute', '+'), font=('宋体', 30), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').grid(column=1, row=0,
|
||
sticky='nsew')
|
||
tkinter.Button(image=up_photo, command=lambda: times('second', '+'), font=('宋体', 30), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').grid(column=2, row=0,
|
||
sticky='nsew')
|
||
tkinter.Button(image=down_photo, command=lambda: times('hour', '-'), font=('宋体', 30), height=60, bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').grid(column=0, row=2,
|
||
sticky='nsew')
|
||
tkinter.Button(image=down_photo, command=lambda: times('minute', '-'), font=('宋体', 30), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').grid(column=1, row=2,
|
||
sticky='nsew')
|
||
tkinter.Button(image=down_photo, command=lambda: times('second', '-'), font=('宋体', 30), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').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,
|
||
bg='#4472c4', activebackground='#4472c4', fg='white')
|
||
starttime.grid(column=0, row=3, columnspan=2, sticky='nsew')
|
||
back = tkinter.Button(image=bigback_photo, command=lambda: schedule('fromclean'), font=('宋体', 30),
|
||
bg='#4472c4', activebackground='#4472c4', fg='white')
|
||
back.grid(column=2, row=3, sticky='nsew')
|
||
root.mainloop()
|
||
|
||
welcome()
|
||
|
||
|
||
def homework():
|
||
global z, toplevel, back_photo, speed
|
||
z = True
|
||
image = Image.open("support/smile.jpg")
|
||
photo = ImageTk.PhotoImage(image)
|
||
|
||
def feedback():
|
||
tkinter.messagebox.showinfo('', '敬请期待')
|
||
'''
|
||
with open('support/code.txt','r+') as f:
|
||
for x in f.readlines():
|
||
tkinter.Label(root,text=x,justify='lest',width=18).grid(column=0)
|
||
'''
|
||
|
||
def edit(con):
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
ppp = tkinter.Text(root, font=('黑体', 48))
|
||
ppp.focus_set()
|
||
ppp.insert("insert", con)
|
||
ppp.grid(row=0, column=0, sticky='nsew')
|
||
button = tkinter.Button(root, image=tick_photo,
|
||
command=lambda: pasd(ppp.get(1.0, END).strip()))
|
||
button.place(rely=0, relx=0.5, anchor='n')
|
||
|
||
def look():
|
||
global cross_photo
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
|
||
def secure():
|
||
def check_pp(pwd):
|
||
if (pwd != 'hxwdsb') and ('hxwdsb' in pwd):
|
||
pasd('')
|
||
else:
|
||
on_button_click('密码错误', '')
|
||
|
||
pho = tkinter.Label(root, image=lock_photo)
|
||
pho.grid(column=0, row=0, sticky='nsew', columnspan=2)
|
||
wor = tkinter.Label(root, text='为避免误操作,请验证密码。\n密码是常量,无法更改且无处查询。', wraplength=200)
|
||
wor.grid(column=0, row=1, sticky='nsew', columnspan=2)
|
||
leb = tkinter.Entry(root, show='·')
|
||
leb.grid(column=0, row=2, sticky='nsew', columnspan=2)
|
||
but = tkinter.Button(root, text='确定', font=('宋体', 24), command=lambda: check_pp(leb.get()))
|
||
but.grid(column=0, row=3, sticky='nsew')
|
||
but2 = tkinter.Button(root, text='取消', font=('宋体', 24), command=lambda: choice_subject())
|
||
but2.grid(column=1, row=3, sticky='nsew')
|
||
tkinter.Button(root, image=back_photo, command=lambda: choice_subject()).place(relx=0, rely=0, anchor='nw')
|
||
tkinter.Button(root, image=cross_photo, command=lambda: schedule('fromhomework')).place(relx=1, rely=0,
|
||
anchor='ne')
|
||
|
||
secure()
|
||
|
||
def pasd(copylist):
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
if copylist == '':
|
||
tkinter.Button(root, image=cross_photo, command=lambda: schedule('fromhomework')).place(relx=1, rely=0,
|
||
anchor='ne')
|
||
work = []
|
||
copylist = str(d.date()) + '\n'
|
||
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 + ':')
|
||
copylist = copylist + subject
|
||
l = 1
|
||
for x in f.readlines():
|
||
work.append(x)
|
||
copylist = copylist + str(l) + ')' + x
|
||
l = l + 1
|
||
# copylist = copylist + '\n'
|
||
pyperclip.copy(copylist)
|
||
i = 9
|
||
doc = Document()
|
||
paragraph3 = doc.add_paragraph()
|
||
paragraph3.add_run('请勿在此处更改,不会被保存。\n' + copylist)
|
||
try:
|
||
doc.save('support/' + str(d.date()) + '作业.docx')
|
||
except:
|
||
on_button_click('请将word窗口关闭')
|
||
root.geometry(
|
||
'{}x{}+{}+{}'.format(root.winfo_screenwidth(), root.winfo_screenheight(), 0, 0))
|
||
subjects = copylist.splitlines()
|
||
root.update()
|
||
else:
|
||
subjects = copylist.splitlines()
|
||
tkinter.Label(root, text='在此更改仅改变本页排版,更改内容不会保存', font=('黑体', 24),
|
||
wraplength=(root.winfo_width() // 2) - 10).grid(column=0, row=0, ipadx=50, sticky='nsew')
|
||
for i, subject in enumerate(subjects):
|
||
tkinter.Label(root, text=subject, font=('黑体', 48), anchor='w', justify='left',
|
||
wraplength=(root.winfo_width()) - 10).grid(column=0, row=i + 1, ipadx=50, sticky='nsew')
|
||
button = tkinter.Button(root, image=pen_photo, command=lambda: edit(copylist))
|
||
button.place(rely=1, relx=1, anchor='ne')
|
||
tkinter.Button(root, text='查看word',
|
||
command=lambda: os.startfile(os.path.normpath('support/' + str(d.date()) + '作业.docx'))).place(
|
||
relx=0, rely=1, anchor='sw')
|
||
tkinter.Button(root, image=back_photo, command=lambda: homework()).place(relx=0, rely=0, anchor='nw')
|
||
tkinter.Button(root, image=cross_photo, command=lambda: schedule('fromhomework')).place(relx=1, rely=0,
|
||
anchor='ne')
|
||
root.update()
|
||
|
||
def add_subject(a):
|
||
with open('support/subjects', 'r+') as h:
|
||
if a + '\n' in h.readlines():
|
||
tkinter.messagebox.showwarning('已存在', a + '已存在')
|
||
h.close()
|
||
elif a == '':
|
||
return False
|
||
else:
|
||
with open('support/subjects', 'a+') as g:
|
||
g.write(str(a) + '\n')
|
||
g.close()
|
||
choice_book(a)
|
||
|
||
def edit_homework(sub, subject, book, line):
|
||
for child in root.grid_slaves():
|
||
if child.grid_info()['row'] == line:
|
||
child.grid_remove()
|
||
addr = tkinter.StringVar(value='https://www.pynote.net')
|
||
ppp = tkinter.Text(root, height=2)
|
||
ppp.focus_set()
|
||
ppp.insert("insert", subject)
|
||
ppp.bind('<Key>', handle_return)
|
||
ppp.grid(row=line, column=0, ipadx=30, padx=10)
|
||
button = tkinter.Button(root, image=tick_photo, command=lambda: rewrite_homework(sub, subject, book,
|
||
ppp.get(1.0,
|
||
END).strip()))
|
||
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:
|
||
lines = file.readlines()
|
||
for i, line in enumerate(lines):
|
||
if line.strip() == subject:
|
||
del lines[i]
|
||
break
|
||
lines.append(content + '\n')
|
||
with open('support/homework/' + str(d.date()) + sub, 'w') as file:
|
||
file.writelines(lines)
|
||
add_work(sub, book)
|
||
|
||
def add_work_write(sub, book, info):
|
||
global label_img
|
||
with open('support/homework/' + str(d.date()) + sub, 'a+') as f:
|
||
f.write(book + info + '\n')
|
||
pass
|
||
try:
|
||
label_img = tkinter.Label(root, image=photo, width=30, height=30)
|
||
label_img.place(relx=0, rely=1, anchor='sw')
|
||
root.update()
|
||
add_work(sub, book)
|
||
except:
|
||
pass
|
||
|
||
def delete_homework(sub, subject, book):
|
||
with open('support/homework/' + str(d.date()) + sub, 'r') as file:
|
||
lines = file.readlines()
|
||
for i, line in enumerate(lines):
|
||
if line.strip() == subject:
|
||
del lines[i]
|
||
break
|
||
with open('support/homework/' + str(d.date()) + sub, 'w') as file:
|
||
file.writelines(lines)
|
||
add_work(sub, book)
|
||
|
||
def handle_return(event):
|
||
if event.keysym == 'Return':
|
||
return 'break'
|
||
|
||
def add_work(sub, book):
|
||
root.grid_columnconfigure(0, weight=1)
|
||
global cross_photo
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
try:
|
||
subjects = open('support/homework/' + str(d.date()) + sub, 'r+').read().splitlines()
|
||
except:
|
||
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
|
||
for i, subject in enumerate(subjects):
|
||
button = tkinter.Label(root, text=subject, justify='left', wraplength=160)
|
||
button.grid(row=i + 1, column=0, ipadx=50, pady=5, sticky='w')
|
||
button = tkinter.Button(root, image=pen_photo,
|
||
command=lambda subject=subject, i=i + 1: edit_homework(sub, subject,
|
||
book,
|
||
i))
|
||
button.grid(row=i + 1, column=1, ipadx=1, pady=5)
|
||
button = tkinter.Button(root, image=cross_photo,
|
||
command=lambda subject=subject: delete_homework(sub, subject, book))
|
||
button.grid(row=i + 1, column=2, ipadx=1, pady=5)
|
||
|
||
def confirm(sub, book, content):
|
||
if content == '':
|
||
choice_book(sub)
|
||
else:
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
leb = tkinter.Message(root,
|
||
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, ppp.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(root, image=back_photo, command=lambda: confirm(sub, book, ppp.get(1.0, END).strip()),
|
||
bg='#4472c4', activebackground='#4472c4', fg='white').place(relx=0, rely=0, anchor='nw')
|
||
tkinter.Label(root, text=sub + ' ' + book + '\n' + '请输入具体页数或题号').grid(row=0, column=0, ipadx=15,
|
||
pady=10, columnspan=3)
|
||
ppp = tkinter.Text(root, height=20)
|
||
ppp.focus_set()
|
||
ppp.bind('<Key>', handle_return)
|
||
ppp.grid(row=i + 2, column=0, columnspan=3, sticky='nsew', padx=10)
|
||
ttk.Button(root, image=continued_photo, command=lambda: add_work_write(sub, book, ppp.get(1.0, END).strip()),
|
||
style='light.TButton').grid(row=i + 3,
|
||
column=0,
|
||
ipadx=15, pady=10)
|
||
tkinter.Button(root, image=cross_photo, command=lambda: schedule('fromhomework'), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white').place(relx=1, rely=0, anchor='ne')
|
||
try:
|
||
root.after(3000, lambda: label_img.destroy())
|
||
except:
|
||
pass
|
||
|
||
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个常用书,删除功能还在测试,敬请期待。')
|
||
else:
|
||
with open('support/' + sub, 'a+') as g:
|
||
g.write(book + '\n')
|
||
g.close()
|
||
f.close()
|
||
add_work(sub, book)
|
||
|
||
def choice_book(sub):
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
try:
|
||
subjects = open('support/' + sub, 'r+').read().splitlines()
|
||
except:
|
||
with open('support/' + sub, 'w+') as f:
|
||
f.write('')
|
||
f.close()
|
||
subjects = open('support/' + sub, 'r+').read().splitlines()
|
||
i = 2
|
||
|
||
tkinter.Label(root, 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(root, text=subject,
|
||
command=lambda subject=subject: add_work(sub, subject),
|
||
height=3)
|
||
button.grid(row=i // 2 + 1, column=i % 2, pady=10, padx=10, sticky='nsew')
|
||
tkinter.Button(root, image=back_photo, command=lambda: choice_subject()).place(relx=0, rely=0,
|
||
anchor='nw')
|
||
ppp = tkinter.Entry(root, width=10)
|
||
ppp.grid(row=i + 2, column=0, ipadx=15, columnspan=3)
|
||
ttk.Button(root, 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(root, 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(root, image=cross_photo, command=lambda: schedule('fromhomework')).place(relx=1, rely=0,
|
||
anchor='ne')
|
||
root.update()
|
||
pass
|
||
|
||
def window_close_handle():
|
||
global z, toplevel
|
||
z = False
|
||
root.destroy()
|
||
try:
|
||
toplevel.overrideredirect(1)
|
||
except:
|
||
pass
|
||
|
||
for x in root.place_slaves():
|
||
x.place_forget()
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
root.title('添加作业')
|
||
root.protocol('WM_DELETE_WINDOW', window_close_handle)
|
||
root.update()
|
||
win_width = 300
|
||
win_height = 800
|
||
step_wid = (300 - root.winfo_width()) / speed
|
||
step_hei = (800 - root.winfo_height()) / speed
|
||
win_x = screen_width - win_width
|
||
win_y = root.winfo_screenheight() // 2 - win_height // 2
|
||
step_x = ((screen_width - win_width) - root.winfo_x()) / speed
|
||
step_y = ((root.winfo_screenheight() // 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)))
|
||
root.update()
|
||
root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height()
|
||
i = 2
|
||
j = 0.2
|
||
|
||
def choice_subject():
|
||
root.grid_rowconfigure(1, weight=0)
|
||
root.grid_columnconfigure(0, weight=1)
|
||
root.grid_columnconfigure(1, weight=1)
|
||
root.grid_columnconfigure(2, weight=0)
|
||
global z
|
||
for child in root.grid_slaves():
|
||
child.grid_remove()
|
||
for t in root.place_slaves():
|
||
t.destroy()
|
||
|
||
subjects = open('support/subjects', 'r').read().splitlines()
|
||
tkinter.Label(root, text='请选择科目').grid(row=0, column=0, pady=10, columnspan=2, sticky='nsew')
|
||
for i, subject in enumerate(subjects):
|
||
try:
|
||
button = ttk.Button(root, image=image_dict[subject], compound="left", text=subject,
|
||
command=lambda subject=subject: choice_book(subject),
|
||
style='light.TButton', )
|
||
except:
|
||
button = ttk.Button(root, image=up_photo, compound="left", text=subject,
|
||
command=lambda subject=subject: choice_book(subject),
|
||
style='light.TButton', )
|
||
button.grid(row=i // 2 + 1, column=i % 2, sticky='nsew', ipady=20)
|
||
ppp = tkinter.Entry(root, width=10)
|
||
ppp.grid(row=i + 2, column=0, ipadx=15, columnspan=2)
|
||
ttk.Button(root, image=continued_photo, command=lambda: add_subject(ppp.get()), style='light.TButton').grid(
|
||
row=i + 3, column=0,
|
||
pady=10, columnspan=2)
|
||
ttk.Button(root, image=check_photo, command=lambda: look(), style='light.TButton').place(relx=1, rely=1,
|
||
anchor='se')
|
||
tkinter.Button(root, image=cross_photo, command=lambda: schedule('fromhomework')).place(relx=1, rely=0,
|
||
anchor='ne')
|
||
root.update()
|
||
|
||
choice_subject()
|
||
|
||
|
||
def settings():
|
||
global speed
|
||
for btn in root.place_slaves():
|
||
btn.destroy()
|
||
for x in root.grid_slaves():
|
||
x.grid_remove()
|
||
|
||
def speed(x):
|
||
global speed
|
||
speed = int(x)
|
||
|
||
tkinter.Label(root, text='动画速度').grid(row=0, column=0)
|
||
spe = tkinter.Entry(root, width=30)
|
||
spe.grid(row=0, column=1)
|
||
tkinter.Button(root, text='确定', command=lambda: speed(spe.get()), bg='#4472c4', activebackground='#4472c4',
|
||
fg='white').grid(row=0, column=2)
|
||
tkinter.Button(root, text='X', command=lambda: schedule('fromchoice'), bg='#4472c4', activebackground='#4472c4',
|
||
fg='white').place(relx=1, rely=0, anchor='ne')
|
||
|
||
|
||
def choice(fromwhere):
|
||
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()
|
||
if not check_class():
|
||
now = '1'
|
||
else:
|
||
now = check_class()
|
||
root.overrideredirect(1)
|
||
if fromwhere == 'fromschedule':
|
||
step_wid = (400 - root.winfo_width()) / speed
|
||
step_hei = (root.winfo_height() - 300) / speed
|
||
win_width = 400
|
||
win_height = 300
|
||
win_x = screen_width - win_width
|
||
win_y = root.winfo_screenheight() // 2 - win_height // 2
|
||
step_x = ((screen_width - win_width) - root.winfo_x()) / speed
|
||
step_y = ((root.winfo_screenheight() // 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)))
|
||
root.update()
|
||
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
|
||
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)))
|
||
root.update()
|
||
root.geometry('{}x{}+{}+{}'.format(400, 300, 0, 0))
|
||
root.update()
|
||
root.title('随机选人')
|
||
global list
|
||
list = []
|
||
status = '开始'
|
||
back = tkinter.Button(text='返回', command=lambda: schedule('fromchoice'), bg='#4472c4', activebackground='#4472c4',
|
||
fg='white')
|
||
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')
|
||
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')
|
||
root.update()
|
||
inn = tkinter.Label(text='正在处理……')
|
||
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'))
|
||
k.close()
|
||
try:
|
||
try:
|
||
with open('support/' + now + '.txt', 'r') as f:
|
||
inf = tkinter.Label(
|
||
text='正在使用人名单:' + now)
|
||
inf.place(relx=0.5, rely=0.6, anchor='center')
|
||
for x in f.readlines():
|
||
x = x.strip('\n')
|
||
list.append(x)
|
||
info = str(len(list))
|
||
f.close()
|
||
except:
|
||
with open('support/1.txt', 'r') as f:
|
||
inf = tkinter.Label(
|
||
text='正在使用全体人名单')
|
||
inf.place(relx=0.5, rely=0.6, anchor='center')
|
||
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]
|
||
break
|
||
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'
|
||
try:
|
||
try:
|
||
if zz != fi[1]:
|
||
if rest():
|
||
on_button_click('人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。',
|
||
'')
|
||
elif not rest():
|
||
on_button_click('人名单文件的sha256值\n与上次不一致。\n请确认人名单是否被篡改。\n按确定以继续。',
|
||
'pppp')
|
||
else:
|
||
password = True
|
||
except:
|
||
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
|
||
except Exception as e:
|
||
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]
|
||
break
|
||
sha = file_sha256(r'support/record.txt') + '\n'
|
||
try:
|
||
if ooo != sha:
|
||
if rest():
|
||
on_button_click('抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。', '')
|
||
elif not rest():
|
||
on_button_click('抽中记录的sha256值\n与上次不一致。\n请确认记录是否被篡改。\n按确定以继续。', 'pppp')
|
||
else:
|
||
password = True
|
||
if (rest()) or (not rest() and password == True):
|
||
log('操作后sha256:' + file_sha256(r'support/record.txt'), 'info')
|
||
password = False
|
||
except:
|
||
pass
|
||
except:
|
||
pass
|
||
try:
|
||
with open('support/config.ini', 'r+') as file:
|
||
for z in file.readlines():
|
||
if '日志处理后sha256:' in jour[z]:
|
||
jourlog = (jour[z].split('sha256:'))[1]
|
||
break
|
||
sha = file_sha256(r'support/journal.log') + '\n'
|
||
try:
|
||
if jourlog != sha:
|
||
if rest():
|
||
on_button_click('日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。',
|
||
'')
|
||
elif not rest():
|
||
on_button_click('日志的sha256值\n与程序自动操作的不一致。\n请确认记录是否被篡改。\n按确定以继续。',
|
||
'pppp')
|
||
else:
|
||
password = True
|
||
if (rest()) or (not rest() and password == True):
|
||
log('', 'info')
|
||
password = False
|
||
except:
|
||
pass
|
||
except:
|
||
pass
|
||
try:
|
||
if int(episode_name) != len(list):
|
||
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')
|
||
elif i in shouldnot:
|
||
on_button_click('人名单中出现不该出现的\n"' + i + '",\n请检查人名单是否被篡改。\n按确定以继续。', '')
|
||
except:
|
||
pass
|
||
|
||
def stop(r):
|
||
global flag, status, list, info, a, chosed, inf
|
||
flag = True
|
||
status = '开始'
|
||
if not rest():
|
||
inf = tkinter.Label(
|
||
text='当前有' + info + '人。\n现在处于下课时间,\n抽到的人将不会添加到已抽中列表。')
|
||
elif str(nolis.get()) == '1':
|
||
inf = tkinter.Label(
|
||
text='当前有' + info + '人。已忽略已抽中列表。\n抽到的人将不会添加到已抽中列表。')
|
||
else:
|
||
chosed.append(r)
|
||
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')
|
||
inf = tkinter.Label(
|
||
text='当前有' + info + '人。历史上已抽中' + str(
|
||
len(chosed)) + '人。\n在抽中所有人前,抽中的人不会再次出现。')
|
||
inf.place(relx=0.5, rely=0.6, anchor='center')
|
||
start = tkinter.Button(text=status, command=lambda: main(), font=('宋体', 24), width=20, bg='#4472c4',
|
||
activebackground='#4472c4', fg='white')
|
||
start.place(relx=0.5, rely=0.8, anchor='center')
|
||
|
||
def main():
|
||
global flag, root, list, status, info, a, chosed, inf
|
||
try:
|
||
inf.destroy()
|
||
except:
|
||
pass
|
||
flag = False
|
||
status = '就你了'
|
||
start = tkinter.Button(text=status, command=lambda: stop(list[r]), font=('宋体', 24), width=20, bg='#4472c4',
|
||
activebackground='#4472c4', fg='white')
|
||
start.place(relx=0.5, rely=0.8, anchor='center')
|
||
while not flag:
|
||
r = random.randint(0, len(list) - 1)
|
||
if len(chosed) == len(list):
|
||
chosed.clear()
|
||
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):
|
||
try:
|
||
a.destroy()
|
||
except:
|
||
pass
|
||
a = tkinter.Label(text=list[r], width=30, font=('华文行楷', 72))
|
||
a.place(relx=0.5, rely=0.35, anchor='center')
|
||
root.update()
|
||
time.sleep(0.01)
|
||
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.35, 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.35, anchor='center')
|
||
start = tkinter.Button(text=status, command=lambda: main(), font=('宋体', 24), width=20, bg='#4472c4',
|
||
activebackground='#4472c4', fg='white')
|
||
start.place(relx=0.5, rely=0.8, anchor='center')
|
||
|
||
|
||
def check_resttime():
|
||
global zhou, d
|
||
try:
|
||
excel = xlrd.open_workbook("support/时刻表.xls")
|
||
sheet = excel.sheet_by_index(0)
|
||
rows: list = sheet.row_values(0)
|
||
index = rows.index('时刻表')
|
||
listindes = sheet.col_values(index)
|
||
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')
|
||
now_time = datetime.datetime.now()
|
||
if start_time < now_time < end_time:
|
||
delta = end_time - now_time
|
||
seconds = delta.total_seconds()
|
||
return int(seconds)
|
||
return 2400
|
||
except:
|
||
return 2400
|
||
|
||
|
||
def schedule(fr):
|
||
global thu, other, zhou, d, canceltopping, photo, label_img, lose, hh, h, no, top, z, speed
|
||
root.wm_attributes('-topmost', 0)
|
||
z = False
|
||
for btn in root.place_slaves():
|
||
btn.destroy()
|
||
for btn in root.grid_slaves():
|
||
btn.grid_remove()
|
||
if lose == []:
|
||
pass
|
||
else:
|
||
a = '缺少关键组件:\n'
|
||
for x in lose:
|
||
a = a + x + '\n'
|
||
on_button_click(a, '')
|
||
lose = []
|
||
if fr == 'fromclean':
|
||
step_wid = (50 - root.winfo_width()) / speed
|
||
step_hei = (730 - root.winfo_height()) / speed
|
||
step_x = (root.winfo_x() - (screen_width)) / speed
|
||
step_y = ((root.winfo_y() - root.winfo_screenheight() / 2) + 250) / 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)))
|
||
root.update()
|
||
elif fr == 'fromchoice':
|
||
step_wid = (50 - root.winfo_width()) / speed
|
||
step_hei = (730 - root.winfo_height()) / speed
|
||
step_x = (root.winfo_x() - (screen_width)) / speed
|
||
step_y = ((root.winfo_y() - root.winfo_screenheight() / 2) + 250) / 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)))
|
||
root.update()
|
||
elif fr == 'fromhomework':
|
||
step_wid = (50 - root.winfo_width()) / speed
|
||
step_hei = (730 - root.winfo_height()) / speed
|
||
step_x = (root.winfo_x() - (screen_width)) / speed
|
||
step_y = ((root.winfo_y() - root.winfo_screenheight() / 2) + 250) / 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)))
|
||
root.update()
|
||
root.geometry(
|
||
'{}x{}+{}+{}'.format(50, 730, screen_width - 50, root.winfo_screenheight() // 2 - 730 // 2))
|
||
root.update()
|
||
root.title('课程表')
|
||
root.resizable(0, 0)
|
||
root.overrideredirect(1)
|
||
root.grid_columnconfigure(0, weight=1)
|
||
try:
|
||
excel = xlrd.open_workbook("support/课程表.xls")
|
||
sheet = excel.sheet_by_index(0)
|
||
rows: list = sheet.row_values(0)
|
||
index = rows.index(zhou[d.weekday()])
|
||
listindes = sheet.col_values(index)
|
||
except:
|
||
on_button_click('请确认课程表文件\n存在且格式正确', '')
|
||
log('课程表文件不存在', 'error')
|
||
root.quit()
|
||
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]:
|
||
zxs = tkinter.Label(root, text=listindes[i][0], font=('华文行楷', 40))
|
||
else:
|
||
zxs = tkinter.Label(root, text=listindes[i], font=('华文行楷', 20))
|
||
zxs.grid(column=0, row=i)
|
||
root.update()
|
||
|
||
listindes.clear()
|
||
y = tkinter.Button(text=zhou[d.weekday()], width=15, command=lambda: choice('fromschedule'))
|
||
y.place(relx=0.5, rely=1, anchor='s')
|
||
global h
|
||
h = tkinter.Button(text='', command=lambda: homework())
|
||
h.grid(row=0, column=0, ipadx=0, sticky=W)
|
||
h = tkinter.Button(text='添加作业', command=lambda: homework())
|
||
h.place(relx=0.5, rely=0, anchor='n')
|
||
top = tkinter.Toplevel()
|
||
top.resizable(0, 0)
|
||
top.overrideredirect(1)
|
||
top.wm_attributes('-topmost', 1)
|
||
top.attributes('-alpha', 0.5)
|
||
btn = tkinter.Button(top, text='点名器', command=lambda: choice('fromtab'), font=('宋体', 8), bg='#4472c4',
|
||
activebackground='#4472c4', fg='white')
|
||
btn.place(relx=0, rely=0, anchor='nw')
|
||
root.update_idletasks()
|
||
btn_width = btn.winfo_width()
|
||
btn_height = btn.winfo_height()
|
||
top.geometry("{}x{}".format(btn_width, btn_height))
|
||
root.wm_attributes('-topmost', 0)
|
||
root.mainloop()
|
||
def clean():
|
||
global fin, a, ll, lose
|
||
ll = '正在清理文件'
|
||
fin = False
|
||
a = 0
|
||
current_dir = os.getcwd()
|
||
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 == 'smile.jpg' 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
|
||
try:
|
||
shutil.move(filepath, os.path.join(uncommon_dir, filename))
|
||
log('移动了' + filename, 'info')
|
||
except Exception as e:
|
||
log('移动' + str(filename) + '失败,因为' + str(e), 'warning')
|
||
a = a + 1
|
||
else:
|
||
ll = filename + '未到过期时间'
|
||
ll = '正在检查程序组件'
|
||
x = os.listdir('support')
|
||
list = ['smile.jpg', 'temp.txt', '课程表.xls', '时间表.xls', '时刻表.xls', '1.txt', 'journal.log', 'record.txt',
|
||
'config.ini']
|
||
lose = []
|
||
for y in list:
|
||
ll = '检查' + y
|
||
if y in x:
|
||
ll = '存在' + y
|
||
else:
|
||
ll = '缺少' + y
|
||
lose.append(y)
|
||
fin = True
|
||
|
||
|
||
def report():
|
||
pass
|
||
'''
|
||
wait_window = tkinter.Toplevel(root)
|
||
b1 = tkinter.Scrollbar(wait_window, width=40)
|
||
b1.place(relx=0.5,rely=0.5,anchor='center')
|
||
b2 = tkinter.Listbox(wait_window, yscrollcommand=b1.set,width=500,height=600)
|
||
with open('support/report.txt', 'r+') as f:
|
||
for x in f.readlines():
|
||
b2.insert(tkinter.END, x)
|
||
b2.place(relx=0.5,rely=0.5,anchor='center')
|
||
b1.config(command=b2.yview)
|
||
win_width = 1000
|
||
win_height = 500
|
||
win_x = root.winfo_screenwidth() // 2 - win_width // 2
|
||
win_y = root.winfo_screenheight() // 2 - win_height // 2 # 窗口垂直居中
|
||
wait_window.geometry('{}x{}+{}+{}'.format(win_width, win_height, win_x, win_y))
|
||
pp = tkinter.Button(wait_window, text="确定", command=wait_window.destroy)
|
||
pp.place(relx=0.5,rely=1,anchor='s')
|
||
wait_window.wait_window()
|
||
'''
|
||
|
||
|
||
def ver():
|
||
with open('support/temp.txt') as f:
|
||
for x in f.readlines():
|
||
f.seek(0)
|
||
if x == 'True':
|
||
'检测到了True'
|
||
return True
|
||
return False
|
||
|
||
|
||
def taskmgr():
|
||
windows = pygetwindow.getAllTitles()
|
||
try:
|
||
if ('Windows 任务管理器' in windows) or ('任务管理器' in windows) or ('Windows任务管理器' in windows):
|
||
try:
|
||
window = pygetwindow.getWindowsWithTitle('任务管理器')[0]
|
||
except Exception as e:
|
||
log(str(e) + 'line 849', 'error')
|
||
|
||
except Exception as e:
|
||
log(str(e) + 'line 874', 'error')
|
||
'''for window_title in windows:
|
||
try:
|
||
window = pygetwindow.getWindowsWithTitle(window_title)[0]
|
||
except Exception as e:
|
||
log(str(e)+'line 849', 'error')
|
||
try:
|
||
if window.title == 'Windows 任务管理器' or window.title == '任务管理器' or window.title == 'Windows任务管理器':
|
||
tsk = tkinter.Toplevel()
|
||
tsk.overrideredirect(1)
|
||
tsk.wm_attributes('-topmost', 1)
|
||
leb = tkinter.Message(tsk,
|
||
text='禁止使用任务管理器,如需使用,请在随机选人模块中验证密码,成功后窗口自动消失(有效期3分钟)。如无密码,关闭任务管理器窗口后此窗口自动消失。此程序无权限关闭任务管理器窗口,请自行在任务栏关闭。',
|
||
font=('仿宋', 24))
|
||
leb.place(relx=0.5, rely=0.5, anchor='center')
|
||
while not ver():
|
||
try:
|
||
tsk.geometry('{}x{}+{}+{}'.format(window.width, window.height, window.left, window.top))
|
||
tsk.update()
|
||
time.sleep(0.1)
|
||
except:
|
||
root.destroy()
|
||
break
|
||
else:
|
||
try:
|
||
tsk.destroy()
|
||
time.sleep(180)
|
||
except:
|
||
pass
|
||
except Exception as e:
|
||
log(str(e)+'line 874', 'error')'''
|
||
time.sleep(1)
|
||
|
||
|
||
def check_score():
|
||
global ve
|
||
ve = False
|
||
|
||
def chan():
|
||
global ve
|
||
ve = False
|
||
|
||
def clo(event):
|
||
tsk.destroy()
|
||
tkinter.messagebox.showinfo('提示', '解除限制,有效期180秒')
|
||
root.after(180000, lambda: chan())
|
||
|
||
def alt_f4(event):
|
||
global pressed_f4
|
||
pressed_f4 = True
|
||
|
||
while 1:
|
||
if not rest():
|
||
windows = pygetwindow.getAllTitles()
|
||
try:
|
||
tsk.overrideredirect(1)
|
||
tsk.wm_attributes('-topmost', 1)
|
||
except:
|
||
pass
|
||
if (('任务管理器' in windows) or ('Windows 任务管理器' in windows)) and ve == False:
|
||
time.sleep(1)
|
||
window = pygetwindow.getWindowsWithTitle('任务管理器')[0]
|
||
tsk = tkinter.Toplevel()
|
||
tsk.overrideredirect(1)
|
||
tsk.wm_attributes('-topmost', 1)
|
||
leb = tkinter.Label(tsk, text='禁止使用任务管理器,请等待解决。', font=('仿宋', 24))
|
||
leb.place(relx=0.5, rely=0.8, anchor='center')
|
||
ph = tkinter.Label(tsk, image=lock_photo, font=('仿宋', 24))
|
||
ph.place(relx=0.5, rely=0.5, anchor='center')
|
||
ve = True
|
||
tsk.geometry('{}x{}+{}+{}'.format(tsk.winfo_screenwidth(), tsk.winfo_screenheight(), 0, 0))
|
||
tsk.bind('<Control-Shift-KeyPress-H>', clo)
|
||
tsk.bind('<Alt-F4>', alt_f4)
|
||
if '成绩单' in windows:
|
||
pygetwindow.getWindowsWithTitle('成绩单')[0].close()
|
||
time.sleep(0.3)
|
||
else:
|
||
time.sleep(check_resttime())
|
||
|
||
|
||
'''
|
||
for window_title in windows:
|
||
try:
|
||
window = pygetwindow.getWindowsWithTitle(window_title)[0]
|
||
except Exception as e:
|
||
log(e,'error')
|
||
try:
|
||
if window.title == '成绩单':
|
||
window.close()
|
||
elif window.title =='任务管理器' or window.title == '任务管理器' or window.title == 'Windows任务管理器':
|
||
try:
|
||
if t5.isAlive():
|
||
pass
|
||
else:
|
||
t5 = Thread(target=taskmgr)
|
||
t5.start()
|
||
except:
|
||
t5 = Thread(target=taskmgr)
|
||
t5.start()
|
||
except Exception as e:
|
||
log(str(e)+'line 899', 'error')
|
||
'''
|
||
speed = 50
|
||
t1 = Thread(target=clean, args=())
|
||
t2 = Thread(target=loading)
|
||
# t4 = Thread(target=check_score)
|
||
t5 = Thread(target=urge)
|
||
t1.start()
|
||
t2.start()
|
||
# t4.start()
|
||
t5.start()
|
||
'''
|
||
def verify_password(pwd):
|
||
if pwd=='xinshijie2002':
|
||
toplevels.destroy()
|
||
time.sleep(5000)
|
||
while 1:
|
||
while not rest():
|
||
time.sleep(1)
|
||
if t4.isAlive():
|
||
pass
|
||
else:
|
||
def do_exit():
|
||
global pressed_f4
|
||
if pressed_f4: # Deny if Alt-F4 is pressed
|
||
pressed_f4 = False # Reset variable
|
||
def alt_f4(event): # Alt-F4 is pressed
|
||
global pressed_f4
|
||
pressed_f4 = True
|
||
toplevels = tkinter.Tk()
|
||
toplevels.geometry('{}x{}+{}+{}'.format(toplevels.winfo_screenwidth(), toplevels.winfo_screenheight(),0,0))
|
||
toplevels.resizable(0, 0)
|
||
toplevels.overrideredirect(1)
|
||
toplevels.wm_attributes('-topmost', 1)
|
||
toplevels.protocol("WM_DELETE_WINDOW")
|
||
toplevels.bind('<Alt-F4>', alt_f4)
|
||
toplevels.protocol("WM_DELETE_WINDOW", do_exit)
|
||
toplevels.configure(bg='white')
|
||
tkinter.Message(toplevels, text='正在等待被关闭的模块启动', font=('宋体', 30)).place(relx=0.5,rely=0.5,anchor='center')
|
||
toplevels.update()
|
||
try:
|
||
t4.start()
|
||
except Exception as e:
|
||
tkinter.Message(toplevels, text='没有启动成功,请等待解决。'+str(e), font=('宋体', 30)).place(relx=0.5, rely=0.5,
|
||
anchor='center')
|
||
ent=tkinter.Entry(toplevels,width=60,show='·')
|
||
ent.place(relx=0.5,rely=0.7,anchor='center')
|
||
btn = tkinter.Button(toplevels,text='确定',command=lambda :verify_password(ent.get()) ,width=60)
|
||
btn.place(relx=0.5, rely=0.8, anchor='center')
|
||
toplevels.mainloop()
|
||
else:
|
||
time.sleep(check_resttime())
|
||
''' |