上班的时候无聊不知道干什么怎么办?看小说,玩游戏,听歌,刷视频都是大家经常会做的,但是被老板发现就GG。最近想做一个很神奇的软件,能够隐秘的看小说的软件,亲测十分实用。今天分享python 简易摸鱼小说阅读器。
下面是源代码 0.py
import tkinter as tk
import tkinter.messagebox as msgbox
import tkinter.filedialog as fd
from ctypes import windll
mydir='D:/'
contents=[]
filename=''
index=0
root_h='700'
root_x='100'
root_y='100'
def open_file():
global filename,contents
cs=[]
try:
with open(filename, 'r',encoding='utf-8') as f:
while True:
content = f.read(1)
if not content:
break
cs.append(content)
except UnicodeDecodeError:
with open(filename, 'r',encoding='gbk') as f:
while True:
content = f.read(1)
if not content:
break
cs.append(content)
except FileNotFoundError:
filename="文件不存在,或者已被删除!\n%s"%filename
windll.user32.MessageBoxA(0,filename.encode('gbk'),"?提示".encode('gbk'), 0x0 | 0x40)
filename=''
return
css=[]
str1=''
ii=0
for i in range(len(cs)):
str1+=cs[i]
ii+=1
if cs[i]=='\n':ii=17
if ii==17 or i==len(cs)-1:
css.append(str1)
ii=0
str1=''
str1=''
ii=0
for i in range(len(css)):
str1+=css[i]
ii+=1
if ii==30 or i==len(css)-1:
contents.append(str1)
ii=0
str1=''
def app_loading():
global filename,index,contents,root_h,root_x,root_y,lfont,lfg
try:
f = open('1.txt', 'r', encoding="utf8")
data = f.read()
# 判断文件是否为空
if len(data) > 0:
# 从文件中获取的数据默认是字符串类型的数据
data = eval(data)
# 把数据加载到了 str_list
str_list = data
f.close()
except:
return
filename=str_list[0]
index=str_list[1]-1
root_h=str_list[2]
root_x=str_list[3]
root_y=str_list[4]
lfont=str_list[5]
lfg=str_list[6]
open_file()
app_loading()
root = tk.Tk()
root.overrideredirect(True)#去除标题栏
root.geometry("300x%s+%s+%s"%(root_h,eval('300+'+root_x),root_y))#窗口放置位置
def set_appwindow_stealth(root):
hwnd = windll.user32.GetParent(root.winfo_id())
windll.user32.SetWindowLongA(hwnd,-20,0x00000080)
def item_doubleclicked(lb):
idxes = lb.curselection()
print(idxes)
if len(idxes) > 0:
msgbox.showinfo('提示',lb.get(idxes[0]))
global index
index=int(lb.get(idxes[0]).rsplit('-',1)[-1])+2
priorpage_show()
def set_clicked(ent_w,ent_h,ent_x,ent_y):
global root_h,root_x,root_y
try:
max_x=root.winfo_screenwidth()-600
if max_x<int(ent_x.get()):
msgbox.showinfo('提示','X尺寸填写小于%s的数!'%max_x)
return
max_y=root.winfo_screenheight()-int(ent_h.get())
if max_y<int(ent_y.get()):
msgbox.showinfo('提示','Y尺寸填写小于%s的数!'%max_y)
return
top1.geometry("%sx%s+%s+%s"%(ent_w.get(),int(ent_h.get()),int(ent_x.get()),int(ent_y.get())))#子窗口放置位置
root.geometry("%sx%s+%s+%s"%(ent_w.get(),ent_h.get(),eval(ent_x.get()+'+'+ent_w.get()),ent_y.get()))#子窗口放置位置
root_h,root_x,root_y=ent_h.get(),ent_x.get(),ent_y.get()
except ValueError:
msgbox.showinfo('提示','请输入纯数字!')
def font_changed(font):
f=font.split(' ')
try:label['font'] = "%s 12"%f[0]
except :label['font'] = "%s 12"%(f[0]+' '+f[1])
def set_font():
root.tk.call('tk', 'fontchooser', 'configure', '-font', 'helvetica 24', '-command', root.register(font_changed))
root.tk.call('tk', 'fontchooser', 'show')
def set_fontcolor():
from tkinter import colorchooser
colorvalue = colorchooser.askcolor(initialcolor='#000000')
label['fg'] = colorvalue[1]
top1=tk.Toplevel(root)
top1.overrideredirect(True)#去除标题栏
top1.geometry("300x%s+%s+%s"%(root_h,root_x,root_y))#子窗口放置位置
tk.Label(top1, text='窗口设置:W x H + X + Y',font=("微软雅黑", 11),justify=tk.CENTER).grid(row=0,column=0,columnspan=6)
ent_w = tk.Entry(top1, width=5)
ent_w.grid(row=1,column=0)
ent_w.insert(0,'300')
ent_w.config(state='disabled')
tk.Label(top1, text='x',font=("微软雅黑", 11),justify=tk.CENTER).grid(row=1,column=1)
ent_h = tk.Entry(top1, width=6)
ent_h.grid(row=1,column=2)
ent_h.insert(0,root_h)
tk.Label(top1, text='+',font=("微软雅黑", 11),justify=tk.CENTER).grid(row=1,column=3)
ent_x = tk.Entry(top1, width=6)
ent_x.grid(row=1,column=4)
ent_x.insert(0,root_x)
tk.Label(top1, text='+',font=("微软雅黑", 11),justify=tk.CENTER).grid(row=1,column=5)
ent_y = tk.Entry(top1, width=6)
ent_y.grid(row=1,column=6)
ent_y.insert(0,root_y)
tk.Button(top1,command=lambda:set_clicked(ent_w,ent_h,ent_x,ent_y),text='设置', font=("微软雅黑", 11), padx=6, pady=8).grid(row=0,column=7,rowspan=2,sticky=tk.W)
tk.Label(top1, text='目录:',font=("微软雅黑",13),justify=tk.CENTER).grid(row=2,column=0,columnspan=2,sticky=tk.E+tk.W)
tk.Button(top1,command=set_font,text='字体', font=("微软雅黑", 11)).grid(row=2,column=6,sticky=tk.E)
tk.Button(top1,command=set_fontcolor,text='颜色', font=("微软雅黑", 11)).grid(row=2,column=7,sticky=tk.W)
f1=tk.Frame(top1)
f1.grid(row=3,column=0,columnspan=8)
scrollbar = tk.Scrollbar(f1, orient="vertical")
lb = tk.Listbox(f1, width=40, height=33, yscrollcommand=scrollbar.set)
scrollbar.config(command=lb.yview)
scrollbar.pack(side="right", fill="y")
lb.pack(side="left",fill="both", expand=True)
lb.bind('<Double-1>', lambda event:item_doubleclicked(lb))
top1.withdraw()
def catalogue_loading():
global contents
lb.delete(0,tk.END)
strfinds='回节章'
indexs=[]
ss=[]
for finds in strfinds:
for i in range(len(contents)):
if '第' in contents[i] and finds in contents[i]:
cs=contents[i][contents[i].find('第'):contents[i].find(finds)+1]
if 2 < len(cs) <8:
cs1_index=contents[i].find('第')
cs1=contents[i][cs1_index:].split('\n',1)[0]
ss.append(cs1)
indexs.append(len(ss))
ss.clear()
sf=strfinds[indexs.index(max(indexs))]
for i in range(len(contents)):
if '第' in contents[i] and sf in contents[i]:
cs=contents[i][contents[i].find('第'):contents[i].find(sf)+1]
if 2 < len(cs) <8:
cs1_index=contents[i].find('第')
cs1=contents[i][cs1_index:].split('\n',1)[0]
lb.insert(tk.END,cs1+'-%s'%i)
button1.config(state='normal')
button2.config(state='normal')
counter=1
def settings_show(i):
global counter
counter+=i
if counter%2==0:
top1.deiconify()
print('目录显示')
else:
top1.withdraw()
print('目录隐藏')
def app_quit():
global filename,index,root_h,root_x,root_y
str_list=[]
if filename !='':
str_list.append(filename)
str_list.append(index)
str_list.append(root_h)
str_list.append(root_x)
str_list.append(root_y)
str_list.append(label['font'])
str_list.append(label['fg'])
with open('1.txt','w', encoding="utf8") as f:
f.write(str(str_list))
root.destroy()
def set_app_alpha(alpha):
hwnd = windll.user32.GetParent(root.winfo_id())
exstyle = windll.user32.GetWindowLongA(hwnd,-20)
exstyle |= 0x00080000 # 使窗口具有能设置透明度的样式
windll.user32.SetWindowLongA(hwnd, -20, exstyle)
windll.user32.SetLayeredWindowAttributes(hwnd,0,alpha,2)
def app_got_focus(event):
#print('窗口可见')
#root.attributes("-alpha", 1)
set_app_alpha(255)
def app_lost_focus(event):
#print('窗口透明')
#root.attributes("-alpha", 0.01)
set_app_alpha(1)
def nextpage_show():
global index,contents
if index <0:index=0
if index ==len(contents):index-=1
label.config(text=contents[index])
index+=1
def priorpage_show():
global index,contents
index-=2
nextpage_show()
def app_open():
global mydir,index,contents,filename
fname = fd.askopenfilename(title='选择文件',initialdir =mydir,filetypes=[("TXT file", "*.txt;*.TXT")])
if(fname==''):
return
import os
if(os.stat(fname).st_size==0):
msgbox.showinfo('提示','TXT文件没有内容!')
return
filename=fname
mydir=filename.rsplit('/',1)[0]+'/'
contents.clear()
open_file()
index=0
nextpage_show()
catalogue_loading()
#鼠标滚动
def app_mousewheel(event):
if event.delta==120:
#上滚
priorpage_show()
if event.delta==-120:
#下滚
nextpage_show()
tk.Button(root,command=app_open,text='打开', font=("微软雅黑", 11), padx=6, pady=8).grid(column=0,row=0)
tk.Button(root,command=lambda:settings_show(1),text='目录', font=("微软雅黑", 11), padx=6, pady=8).grid(column=1,row=0)
tk.Button(root,command=app_quit,text='退出', font=("微软雅黑", 11), padx=6, pady=8).grid(column=2,row=0)
button1=tk.Button(root,command=priorpage_show,text='上一页', font=("微软雅黑", 11), padx=6, pady=8)
button1.grid(column=3,row=0)
button1.config(state='disabled')
button2=tk.Button(root,command=nextpage_show,text='下一页', font=("微软雅黑", 11), padx=6, pady=8)
button2.grid(column=4,row=0)
button2.config(state='disabled')
label = tk.Label(root, text='',font="{微软雅黑 Light} 12",wraplength=270,justify=tk.LEFT,padx=6,pady=6)
label.grid(column=0,row=1,columnspan=5)
root.bind("<Enter>", app_got_focus)
root.bind("<Leave>", app_lost_focus)
root.bind("<MouseWheel>", app_mousewheel)
if filename !='':
catalogue_loading()
label['font']=lfont
label['fg']=lfg
nextpage_show()
root.after(10000, lambda: set_appwindow_stealth(root))
root.mainloop()
运行 0.bat
@start "CMD窗口闭关" "pythonw" "0.py" %1 %2 %3 %4 %5 %6 %7 %8 %9
1978



被折叠的 条评论
为什么被折叠?



