Skip to content

V2 #3

@Martin-0310

Description

@Martin-0310
import tkinter as t
import easygui as g
import pickle as pk
from tkinter import simpledialog as s
from tkinter import filedialog as f
page=1
start=1
end=27
text='1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13' \
     '\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27'
def new_project():
    global edit,places,chars
    tk.title('文件编辑器 V2版本')
    for i in range(27):
        edit[i]=(t.Entry(tk,width=285,font=('微软雅黑',16)))
        edit[i].place(x=45,y=places[i])
    for i in range(1998):
        chars[i]=''
def update():
    global page
    page_label.config(text=str(page)+'/74')
    page_scale.set(page)
def open_file():
    global information,chars
    text=1
    to_page=(text//27)+1
    if page<to_page:
        for i in range(page,to_page):
            right()
    else:
        for i in range(to_page,page):
            left()
    try:
        new_project()
        information=f.askopenfilename()
        file=open(information,'r')
        file=file.read()
        file=file.split('\n')
        for i in range(len(file)):
            chars[i]=file[i]
        count=0
        for i in file:
            if count>26:
                break
            edit[count].insert(-1,i)
            count+=1
        update()
        tk.title(information)
    except FileNotFoundError:
        new_project()
        edit[0].insert(-1,'不存在当前文件地址:')
        edit[1].insert(-1,information)
def save_as():
    global chars,page,start,end
    j=0
    for i in range(start-1,end):
        chars[i]=edit[j].get()
        j+=1
    name=f.asksaveasfilename()
    file=open(name,'w')
    for i in range(1998):
        file.write(chars[i]+'\n')
    new_project()
    update()
    tk.title('文件编辑器 V2版本')
def save_as_pkl_file():
    global chars,page,start,end
    S=""
    j=0
    for i in range(start-1,end):
        S+=edit[j].get()
        j+=1
    name=f.asksaveasfilename()
    file=open(name+'.pkl','w')
    pk.dump(S,file)
    file.close()
    new_project()
    update()
    tk.title('文件编辑器 V2版本')
def left():
    global page,text,start,end,text
    if page==1:
        pass
    else:
        j=0
        for i in range(start,end+1):
            chars[i]=edit[j].get()
            j+=1
        page-=1
        start=(page-1)*27+1
        end=page*27
        text=''
        j=0
        for i in range(27):
            edit[i]=t.Entry(tk,width=285,font=('微软雅黑',16))
            edit[i].place(x=45,y=places[i])
        for i in range(start,end+1):
            if i!=end:
                text+=str(i)+'\n'
            else:
                text+=str(i)
            edit[j].insert(-1,chars[i])
            j+=1
        line_label.config(text=text)
    update()
def right():
    global page,text,start,end,text,chars,edit,places
    if end==1998:
        pass
    else:
        j=0
        for i in range(start,end+1):
            chars[i]=edit[j].get()
            j+=1
        page+=1
        start=(page-1)*27+1
        end=page*27
        text=''
        j=0
        for i in range(27):
            edit[i]=t.Entry(tk,width=285,font=('微软雅黑',16))
            edit[i].place(x=45,y=places[i])
        for i in range(start,end+1):
            if i!=end:
                text+=str(i)+'\n'
            else:
                text+=str(i)
            edit[j].insert(-1,chars[i])
            j+=1
        line_label.config(text=text)
    update()
def goto():
    global page
    to_page=s.askinteger('输入页数','请输入跳转到的页数')
    if page<to_page:
        for i in range(page,to_page):
            right()
    else:
        for i in range(to_page,page):
            left()
def goto_page():
    global page
    text=s.askinteger('输入行数','跳转到行数存在的页码')
    to_page=(text//27)+1
    if page<to_page:
        for i in range(page,to_page):
            right()
    else:
        for i in range(to_page,page):
            left()
def seek():
    global chars
    text=s.askinteger('输入行数','如果有一些行数的内容太长,这样就可以轻松看到某一行的内容。')
    right()
    left()
    g.codebox('查看器','内容:',str(chars[text]))
tk=t.Tk()
tk.geometry('1367x912')
tk.title('文件编辑器 V2版本')
tk.resizable(True,True)
tk.config(bg='light grey')
edit=[]
places=[]
chars=[]
for i in range(27):
    places.append(28*i)
for i in range(1999):
    chars.append('')
for i in range(27):
    edit.append(t.Entry(tk,width=285,font=('微软雅黑',16)))
    edit[i].place(x=45,y=places[i])
menu=t.Menu(tk)
file_menu=t.Menu(menu,tearoff=False)
menu_menu=t.Menu(menu,tearoff=False)
file_menu.add_command(label='新建',command=new_project)
file_menu.add_command(label='打开',command=open_file)
file_menu.add_command(label='保存',command=save_as)
file_menu.add_command(label='保存为 .pkl 文件(支持中文保存)',command=save_as_pkl_file)
menu_menu_goto=t.Menu(menu_menu,tearoff=False)
menu_menu_goto.add_command(label='跳转至页码',command=goto)
menu_menu_goto.add_command(label='跳转至行数',command=goto_page)
menu_menu.add_cascade(label='跳转至',menu=menu_menu_goto)
menu_menu.add_command(label='长文显示器',command=seek)
menu.add_cascade(label='文件',menu=file_menu)
menu.add_cascade(label='菜单',menu=menu_menu)
line_label=t.Label(tk,width=3,height=27,bg='grey',fg='black',font=('微软雅黑',16),text=text)
line_label.place(x=0,y=0)
left_button=t.Button(tk,width=3,height=1,font=('微软雅黑',11),text='<',command=left,bg='grey')
left_button.place(x=1250,y=770)
right_button=t.Button(tk,width=3,height=1,font=('微软雅黑',11),text='>',command=right,bg='grey')
right_button.place(x=1300,y=770)
page_label=t.Label(tk,width=5,height=1,font=('微软雅黑',16),text='1/74',bg='light grey')
page_label.place(x=1150,y=770)
page_scale=t.Scale(tk,from_=1,to=74,length=290,orient=t.HORIZONTAL,bg='light grey',highlightbackground='light grey')
page_scale.place(x=10,y=770)
tk.config(menu=menu)
tk.mainloop()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions