版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42382909/article/details/82883237
python3.6 使用tkinter模块实现记事本功能并打包成exe文件
-
环境准备
在本地电脑上提前安装好python3.6环境,可以在官网直接下载,下载地址:https://www.python.org/downloads/windows/ ,需要注意的是要下载的是3.6版本
-
安装pycharm开发环境
这里说下,为什么要安装pycharm环境,主要有两点:1、使用pycharm开发环境,编写代码更方便;2、使用pycharm环境安装第三方依赖库更加容易
pycharm下载链接:http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC
由于tkinter模块是python自带模块,所以不需要安装第三方库,也可以选择不使用pycharm,但是当你使用后你会发现,这个开发环境是真好用
-
实现功能
本案例是实现一个记事本功能
效果展示图:
-
完成打包
代码已经实现了,那么如何将程序打包成exe可执行文件呢?这时候就需要用到python的第三方库pyinstaller库
使用pycharm安装好第三方库,如何安装在我的另一篇博文中有介绍
pyinstaller安装完成之后,就可以进行打包了
打包命令为:pyinstaller -F 文件名(带后缀py):
打开cmd,在命令行执行命令,首先进入到pyinstaller的安装目录(如果是使用pycharm方式安装的,那么pyinstaller.exe的位置为python安装目录下的Scripts目录下,当然安装的时候也可以指定安装目录),然后执行打包命令pyinstaller -F 文件名(这里是绝对路径),否则会找不到.py文件,打包完成后会在pyinstaller.exe所在目录下生成一个默认文件夹dist,打包的exe文件就在里面了。
pyinstaller常用参数说明:
–icon=图标路径
-F 打包成一个exe文件
-w 使用窗口,无控制台
-c 使用控制台,无窗口
-D 创建一个目录,里面包含exe以及其他一些依赖性文件
pyinstaller -h 来查看参数
-
代码展示
#-*- encoding:utf8 -*- from tkinter import * from tkinter.messagebox import * import tkinter.filedialog import os note=Tk() note.title('note book') #初始大小显示以及定位位置,注意一定要使用x而非* note.geometry('800x500+100+100') filename='' #定义版本子菜单对应的相关函数 def autor(): tkinter.messagebox.askokcancel('作者信息','本软件由xx开发') def about(): tkinter.messagebox.askokcancel('版权信息.Copyright','本软件由xx所有') #定义文件子菜单对应的相应函数 def openfile(): global filename filename=tkinter.filedialog.askopenfilename(defaultextension='.txt') if filename == '': filename=None else: note.title('新建文本:'+os.path.basename(filename)) textPad.delete(1.0,END) f=open(filename,'r',encoding='utf-8') #注意后面要加上读取的编码格式,否则报编码错误 textPad.insert(1.0,f.read()) f.close() def new(): global filename note.title=("新建文本") filename=None textPad.delete(1.0,END) def save(): global filename try: f=open(filename,'w') msg=textPad.get(1.0,END) f.write(msg) f.close() except: saveas() def saveas(): global filename f=tkinter.filedialog.asksaveasfilename(initialfile='新建文本.txt',defaultextension='.txt') filename=f fh=open(f,'w') msg=textPad.get(1.0,END) fh.write(msg) fh.close() note.title('新建文本:'+os.path.basename(f)) #退出系统 def exit(): #if askokcancel(note,'你确定要退出吗?'): note.destroy() #创建编辑子菜单的对于函数 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(note) topsearch.geometry('300x30+200+250') labell=Label(topsearch,text='Find') labell.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) #创建主菜单 menubar=Menu(note) note.config(menu=menubar) #创建文件子菜单 filemenu=Menu(menubar) filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) filemenu.add_command(label='打开',accelerator='Ctrl+O',command=openfile) filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) filemenu.add_command(label='另存为',accelerator='Ctrl+Shift+S',command=saveas) filemenu.add_command(label='退出',command=exit) menubar.add_cascade(label='文件',menu=filemenu) #创建编辑子菜单 editmenu=Menu(menubar) editmenu.add_command(label='撤销',accelerator='Ctrl+z',command=undo) editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) #添加分割线 editmenu.add_separator() editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) editmenu.add_command(label='复制',accelerator='Ctrl+C',command=copy) editmenu.add_command(label='粘贴',accelerator='Ctrl+V',command=paste) editmenu.add_separator() editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) editmenu.add_command(label='全选',accelerator='Ctrl+A',command=selectAll) menubar.add_cascade(label='编辑',menu=editmenu) #添加版权子菜单 aboutmenu=Menu(menubar) aboutmenu.add_command(label='作者',command=autor) aboutmenu.add_command(label='版权',command=about) menubar.add_cascade(label='关于',menu=aboutmenu) #添加工具栏 toolbar=Frame(note,height=25,bg='white') shortButton=Button(toolbar,text='打开',command=openfile) shortButton.pack(side=LEFT,padx=5,pady=5) shortButton=Button(toolbar,text='保存',command=save) shortButton.pack(side=LEFT) toolbar.pack(expand=NO,fill=X) #添加状态栏 status=Label(note,text='Ln20',bd=1,relief=SUNKEN,anchor=W) status.pack(side=BOTTOM,fill=X) #添加编辑界面以及滚动条 lnlabel=Label(note,width=2,bg='antique white') lnlabel.pack(side=LEFT,fill=Y) textPad=Text(note,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) #显示页面 note.mainloop()