Python中tkinter实现记事本的思路和方法是什么
Admin 2022-09-07 群英技术资讯 1009 次浏览
今天小编跟大家讲解下有关“Python中tkinter实现记事本的思路和方法是什么”的内容 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了相关资料,希望小伙伴们看了有所帮助。想要完成记事本,我们首先需要考虑一个正常的记事本都需要具有哪些功能,我们将这些功能按键添加到我们的UI界面上即可。一般功能如下:
设定好了基本的功能选项之后我们再来思考实现记事本的思路。
创建记事本窗口
创建窗口的时候,我们要设定好窗口的高度、宽度、文本区域以及各种菜单,与设定的内容如下:
class Notepad:
root = Tk()
'''
Width:宽度
Heith:高度
TextArea:文本区域
MenuBar:菜单栏
FileMenu:文件菜单
EditMenu:编辑菜单
HelpMenu:帮助菜单
ScrollBat:滚动条
'''
Width = 300
Height = 300
TextArea = Text(root)
MenuBar = Menu(root)
FileMenu = Menu(MenuBar, tearoff=0)
EditMenu = Menu(MenuBar, tearoff=0)
HelpMenu = Menu(MenuBar, tearoff=0)
ScrollBar = Scrollbar(TextArea)
file = None
设定记事本菜单项
设定好了基本的框架之后,接下来就是向整个框架中填入各种参数与配置项,包括菜单栏中各种功能选项、窗口标题、窗口位置等。
后续如果向添加新的功能在init函数中进行添加即可
菜单项代码示例:
def __init__(self, **kwargs):
# 增加新建配置
self.FileMenu.add_command(label="新建", command=self.__newFile)
# 增加打开配置
self.FileMenu.add_command(label="打开", command=self.__openFile)
# 增加保存配置
self.FileMenu.add_command(label="保存", command=self.__saveFile)
配置功能选项
接下来就是构建不同的功能函数,实现每一个小功能,这里不需要我们编写独立的功能函数代码,只需要使用tkinter中的函数进行再封装即可。
配置功能示例代码:
def __newFile(self):
'''
新文件:默认是一个未命名文件
'''
self.root.title("未命名文件")
self.file = None
self.TextArea.delete(1.0, END)
完整代码如下
import tkinter
import os
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *
class Notepad:
root = Tk()
'''
Width:宽度
Heith:高度
TextArea:文本区域
MenuBar:菜单栏
FileMenu:文件菜单
EditMenu:编辑菜单
HelpMenu:帮助菜单
ScrollBat:滚动条
'''
Width = 300
Height = 300
TextArea = Text(root)
MenuBar = Menu(root)
FileMenu = Menu(MenuBar, tearoff=0)
EditMenu = Menu(MenuBar, tearoff=0)
HelpMenu = Menu(MenuBar, tearoff=0)
ScrollBar = Scrollbar(TextArea)
file = None
def __init__(self, **kwargs):
# 设置文本框的大小
try:
self.Width = kwargs['width']
except KeyError:
pass
try:
self.Height = kwargs['height']
except KeyError:
pass
# 设置窗口标题
self.root.title("Python记事本")
# 将窗口居中显示
screenWidth = self.root.winfo_screenwidth()
screenHeight = self.root.winfo_screenheight()
left = (screenWidth / 2) - (self.Width / 2)
top = (screenHeight / 2) - (self.Height / 2)
self.root.geometry('%dx%d+%d+%d' %
(self.Width, self.Height, left, top))
# 文本区域大小调整
self.root.grid_rowconfigure(0, weight=1)
self.root.grid_columnconfigure(0, weight=1)
# Add controls (widget)
self.TextArea.grid(sticky=N + E + S + W)
# 增加新建配置
self.FileMenu.add_command(label="新建", command=self.__newFile)
# 增加打开配置
self.FileMenu.add_command(label="打开", command=self.__openFile)
# 增加保存配置
self.FileMenu.add_command(label="保存", command=self.__saveFile)
# 增加退出配置
self.FileMenu.add_separator()
self.FileMenu.add_command(label="退出", command=self.__quitApplication)
# 菜单中设置文件按钮
self.MenuBar.add_cascade(label="文件", menu=self.FileMenu)
# 增加剪切功能
self.EditMenu.add_command(label="剪切", command=self.__cut)
# 增加复制功能
self.EditMenu.add_command(label="复制", command=self.__copy)
# 增加粘贴功能
self.EditMenu.add_command(label="粘贴", command=self.__paste)
# 菜单中设置编辑按钮
self.MenuBar.add_cascade(label="编辑", menu=self.EditMenu)
# 增加关于记事本选项
self.HelpMenu.add_command(label="关于记事本", command=self.__showAbout)
# 菜单中射者帮助按钮
self.MenuBar.add_cascade(label="帮助", menu=self.HelpMenu)
self.root.config(menu=self.MenuBar)
self.ScrollBar.pack(side=RIGHT, fill=Y)
# 滚动条根据内容进行调整
self.ScrollBar.config(command=self.TextArea.yview)
self.TextArea.config(yscrollcommand=self.ScrollBar.set)
def __quitApplication(self):
'''
用于退出程序(关了就消失)
'''
self.root.destroy()
def __showAbout(self):
'''
添加帮助菜单中的信息
'''
showinfo("关于记事本", "来自:二哥不像程序员")
def __openFile(self):
'''
打开文件
'''
self.file = askopenfilename(defaultextension=".txt",
filetypes=[("All Files", "*.*"),
("Text Documents", "*.txt")])
if self.file == "":
self.file = None
else:
self.root.title(os.path.basename(self.file))
self.TextArea.delete(1.0, END)
file = open(self.file, "r")
self.TextArea.insert(1.0, file.read())
file.close()
def __newFile(self):
'''
新文件:默认是一个未命名文件
'''
self.root.title("未命名文件")
self.file = None
self.TextArea.delete(1.0, END)
def __saveFile(self):
'''
用于保存文件,不存在的文件进行新建,存在的文件在原文件基础上覆盖保存
'''
if self.file == None:
self.file = asksaveasfilename(initialfile='Untitled.txt',
defaultextension=".txt",
filetypes=[("All Files", "*.*"),
("Text Documents",
"*.txt")])
if self.file == "":
self.file = None
else:
file = open(self.file, "w")
file.write(self.TextArea.get(1.0, END))
file.close()
# 更改title名字为文件名
self.root.title(os.path.basename(self.file))
else:
file = open(self.file, "w")
file.write(self.TextArea.get(1.0, END))
file.close()
# 添加功能项
def __cut(self):
self.TextArea.event_generate("<<Cut>>")
def __copy(self):
self.TextArea.event_generate("<<Copy>>")
def __paste(self):
self.TextArea.event_generate("<<Paste>>")
def run(self):
# 使用mainloop()使得窗口一直存在
self.root.mainloop()
notepad = Notepad(width=600, height=400)
notepad.run()

菜单栏根据不同的系统会有不同的位置展示,mac嵌入在左上角,win在窗口内部进行嵌入。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要和大家分享几个Python Pandas中处理CSV文件的常用技巧,如:统计列值出现的次数、筛选特定列值、遍历数据行等,需要的可以参考一下
这篇文章主要介绍了Python 面向切面编程 AOP 及装饰器,AOP,就是面向切面编程,简单的说,就是动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程,更多相关资需要的小伙伴可以参考下面文章内容
本文主要介绍了使用python opencv对畸变图像进行矫正的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我们知道视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,因此视图是需要掌握的。为了让大家更了解视图,这篇文章就给大家分享Django视图函数的使用,感兴趣的朋友就继续往下看吧。
这篇文章主要介绍了Python NumPy中diag函数的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008