• Python开发简单记事本


    摘要:

    本文是使用Python,结合Tkinter开发简单记事本。

      本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。

      最近很想对python加深学习一下,同时也是想试着做一些东西,今天使用python,结合Tkinter来做一个简单的跨平台记事本。最终实现的记事本如下,也算是麻雀虽小,五脏俱全了,之后也是会继续完善的:

      如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个toolbar:新建、打开、撤销和保存。下来就我个人构建这个记事本做个总结。

    一 整体框架构建

    1.三个主模块的建立

      首先,我们先建立上图中的三个主模块,同时,在模块中建立各个模块的功能。先以文件为例:下设功能:新建、打开、保存和另存为,代码如下:

    #-*-encoding:utf8
    from Tkinter import *
    
    root = Tk()
    root.title('Benben Node')
    
    #create menu
    menubar = Menu(root)
    root.config(menu = menubar)
    
    filemenu = Menu(menubar)
    filemenu.add_command(label = '新建',accelerator ='ctrl + N')
    filemenu.add_command(label = '打开',accelerator ='ctrl + O')
    filemenu.add_command(label = '保存',accelerator ='ctrl + S')
    filemenu.add_command(label = '另存为',accelerator ='ctrl + Shift + s')
    menubar.add_cascade(label = '文件',menu = filemenu)
    
    root.mainloop()

    运行结果:

      我们可以看到一个简单的文件栏就建好了。对应的建立编辑和关于模块。编辑指的是对文本编辑中要使用的模块,下设功能:撤销,重做,复制,剪切,粘贴,查找和全选;关于是下设作者和版权两栏。相应模块对应的代码如下:

    #编辑
    editmenu = Menu(menubar)
    editmenu.add_command(label = '撤销',accelerator = 'ctrl + z')
    editmenu.add_command(label = '重做',accelerator = 'ctrl + y')
    editmenu.add_command(label = '复制',accelerator = 'ctrl + c')
    editmenu.add_command(label = '剪切',accelerator = 'ctrl + x')
    editmenu.add_command(label = '粘贴',accelerator = 'ctrl + v')
    editmenu.add_command(label = '查找',accelerator = 'ctrl + F')
    editmenu.add_command(label = '全选',accelerator = 'ctrl + A')
    menubar.add_cascade(label = '编辑',menu = editmenu)
    
    #关于
    aboutmenu = Menu(menubar)
    aboutmenu.add_command(label = '作者')
    aboutmenu.add_command(label = '版权')
    menubar.add_cascade(label = '关于',menu = aboutmenu)

    运行结果:

    截图未能得到各个模块对应的功能。

    2.toolbar

      在记事本中添加toolbar,添加对应的button并设定合适的间距,对应的代码如下:

    #toolbar
    toolbar = Frame(root,height = 15,bg = 'SkyBlue')
    shortButton = Button(toolbar,text = '新建',command = open)
    shortButton.pack(side = LEFT)
    shortButton = Button(toolbar,text = '打开',command = openfile)
    shortButton.pack(side = LEFT,padx = 5,pady = 5)
    shortButton = Button(toolbar,text = '保存',command = save)
    shortButton.pack(side = RIGHT)
    shortButton = Button(toolbar,text = '撤销',command = undo)
    shortButton.pack(side = RIGHT,padx = 5,pady = 5)
    toolbar.pack(expand = NO,fill = X)

    3.创建状态栏(statusbar)和正文编辑区域

    首先在程序中添加:

    root = Tk()
    root.title('Benben Node')
    root.geometry("800x500+100+100")

    编辑状态栏的代码:

    #statusbar
    status = Label(root,text = 'Ln20',bd = 1,relief = SUNKEN,anchor = 'w')
    status.pack(side = BOTTOM,fill = X)

    当然我们还可以建立相应的编辑区域和滚动条,对应的代码如下:

    #正文编辑区域
    lnlabel = Label(root,width = 2,bg = 'antique white')
    lnlabel.pack(side = LEFT,fill = Y)
    
    textpad = Text(root,undo = True)
    textpad.pack(expand = YES,fill = BOTH)
    
    scroll = Scrollbar(textpad)
    textpad.config(yscrollcommand = scroll.set)
    scroll.config(command = textpad.yview)
    scroll.pack(side = RIGHT,fill = Y)

      执行代码,结果:

    输入相应的可以看到右边界对应的滚动条随输入滚动。

    二. 关于模块的实现

      在这三个模块中,关于是最好实现的一个,那就从最简单的开始实现吧。对应的代码如下:

    from tkMessageBox import *
    
    #关于
    def author():
        showinfo('作者信息','本软件由可爱的奔奔完成')
    def about():
        showinfo('版权信息.copyright','版权属于奔奔')
    
    aboutmenu = Menu(menubar)
    aboutmenu.add_command(label = '作者',command = author)
    aboutmenu.add_command(label = '版权',command = about)
    menubar.add_cascade(label = '关于',menu = aboutmenu)

    运行结果:

         

    三.文件模块的实现

      这部分的实现参见Tkinter官网中的fileDialogs,相应的使用各个方法实现功能:新建、打开、保存和另存为,建立相应的函数实现,代码如下:

    #新建
    def new():
        root.title('未命名文件')
        filename = None
        textpad.delete(1.0,END)
    #打开
    def openfile():
        global filename
        filename = askopenfilename(defaultextension = '.txt')
        if filename == '':
            filename = None
        else:
            root.title('FileName:'+os.path.basename(filename))
            textpad.delete(1.0,END)
            f = open(filename,'r')
            textpad.insert(1.0,f.read())
            f.close()
    
    #保存
    def save():
        global filename
        try:
            f = open(filename,'w')
            msg = textpad.get(1.0,END)
            f.write(msg)
            f.close()
        except:
            saveas()
    #另存为
    def saveas():
        f = asksaveasfilename(initialfile= '未命名.txt', defaultextension='.txt')
        global filename
        filename = f
        fh = open(f,'w')
        msg = textpad.get(1.0,END)
        fh.write(msg)
        fh.close()
        root.title('FileName:'+os.path.basename(f))

      相应的在filemenu和toolbar中加入对应的command,运行结果:

      

    四 编辑模块的实现

      编辑要实现的功能:撤销,重做,复制,剪切,粘贴,查找和全选,对应的函数代码如下:

    def cut():
        textpad.event_generate('<<Cut>>')
    
    def copy():
        textpad.event_generate('<<Copy>>')
    
    def paste():
        textpad.event_generate('<<Paste>>')
    
    def redo():
        textpad.event_generate('<<Redo>>')
    
    def undo():
        textpad.event_generate('<<Undo>>')
    
    def selectAll():
        textpad.tag_add('sel','1.0',END)
    
    def search():
        topsearch = Toplevel(root)
        topsearch.geometry('300x30+200+250')
        label1 = Label(topsearch,text='Find')
        label1.grid(row=0, column=0,padx=5)
        entry1 = Entry(topsearch,width=20)
        entry1.grid(row=0, column=1,padx=5)
        button1 = Button(topsearch,text='查找')
        button1.grid(row=0, column=2)

      同样在editmenu和toolbar中加入对应的command。运行代码,功能实现!快捷键亲测可用~

      这算是对此次开发的简单记事本的一个总结,之后有时间也是会添加更多的功能。

  • 相关阅读:
    C# 中常用数据类型与控件类型的命名规则
    通过方法名字符串调用方法
    AutoCAD.Net/C#.Net QQ群:193522571 VS2013与cad调试时的问题
    87位随机字符串
    C#访问剪切板
    AutoCAD.Net/C#.Net QQ群:193522571 c#链接到网址
    AutoCAD.Net/C#.Net QQ群:193522571 WINFORM获取计算机名、域名、用户名和当前Mac地址
    AutoCAD.Net/C#.Net QQ群:193522571 AutoCAD向命令栏发送命令
    AutoCAD.Net/C#.Net QQ群:193522571 AutoCAD中状态栏
    AutoCAD.Net/C#.Net QQ群:193522571 AutoCAD中写状态栏status bar
  • 原文地址:https://www.cnblogs.com/ybjourney/p/4995678.html
Copyright © 2020-2023  润新知