记事本项目基础复现(base in tkinter)
程序的主要功能复现就是:
- 文件编辑:新建,打开,保存,退出等
- 快捷键复现:文件编辑的快捷键复现
整体采用了面向对象的方法设计,主要学习使用tk图形界面组件的一些基本要素:菜单组件Menu,文本框组件Text,文件操作组件filedialog,以及基本的事件处理bind。
"""notebook recover"""
#coding=utf-8
from tkinter.filedialog import *
from tkinter.colorchooser import *
from tkinter import *
from tkinter.filedialog import *
class Application(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.textpad = None
self.filename = None
self.contextMenu = None
self.pack()
self.createWidget()
def openAskColor(self):
s1 = askcolor(color="red", title="选择背景色")
self.textpad.config(bg=s1[1])
def createWidget(self):
menubar = Menu(root)
menuFile = Menu(menubar)
menuEdit = Menu(menubar)
menuHelp = Menu(menubar)
menubar.add_cascade(label="文件(F)", menu=menuFile)
menubar.add_cascade(label="编辑(E)", menu=menuEdit)
menubar.add_cascade(label="帮助(H)", menu=menuHelp)
menuFile.add_command(label="新建", accelerator="ctrl+n", command=self.newfile)
menuFile.add_command(label="打开", accelerator="ctrl+O", command=self.openfile)
menuFile.add_command(label="保存", accelerator="ctrl+S", command=self.savefile)
menuFile.add_separator() # 分割线
menuFile.add_command(label="退出", accelerator="ctrl+q", command=self.exit)
menuEdit.add_command(label="剪切")
menuEdit.add_command(label="复制")
menuEdit.add_command(label="粘贴")
# 将主菜单栏加到根窗口
root["menu"] = menubar
# 增加快捷键响应
root.bind("<Control-n>", lambda event:self.newfile())
root.bind("<Control-o>", lambda event:self.openfile())
root.bind("<Control-s>", lambda event: self.savefile())
root.bind("<Control-q>", lambda event: self.exit())
# 文本编辑
self.textpad = Text(root, width=50, height=30)
self.textpad.pack()
# 创建上下菜单
self.contextMenu = Menu(root)
self.contextMenu.add_command(label="背景颜色", command= self.openAskColor)
# 为右键绑定事件
root.bind("<Button-3>", self.createContextMenu)
def createContextMenu(self,event):
# 菜单会在鼠标右键点击的地方显示出来
self.contextMenu.post(event.x_root, event.y_root)
def test(self):
pass
def newfile(self):
self.filename = asksaveasfilename(title="另存为", initialfile="未命名.txt", \
filetypes=[("文本文档", "*.txt")],
defaultextension=".txt")
self.savefile()
def openfile(self):
self.textpad.delete(1.0,END) #清空text。textpad
with askopenfile(title = "打开文本文件") as f:
self.textpad.insert(INSERT, f.read())
self.filename = f.name
def savefile(self):
if self.filename == None:
c = self.textpad.get(1.0,END)
self.filename = asksaveasfilename(title="另存为", initialfile="未命名.txt", \
filetypes=[("文本文档", "*.txt")],
defaultextension=".txt")
with open(self.filename, "w") as f:
c = self.textpad.get(1.0, END)
f.write(c)
else:
with open(self.filename, "w") as f:
c = self.textpad.get(1.0, END)
f.write(c)
def exit(self):
root.quit()
if __name__ == "__main__":
root = Tk()
root.geometry("450x300+200+300")
root.title("记事本")
app = Application(master=root)
root.mainloop()
如何将python程序打包为.exe文件?
-
确保python中安装了pyinstaller包,没有的话可以通过pycharm中进行交互式安装,也可以通过命令行窗格:
-
pip install installer -i http://pypi.douban.com/simple -- trusted-host pypi.douban.com
然后就是在命令行窗格中cd 到py文件的路径下面输入:
pyinstaller -F xxxx.py
那么等待一会后就会产生一个dist的文件夹,打包好的程序就在里头