Python中tkinter实现记事本的思路和方法是什么
Admin 2022-09-07 群英技术资讯 351 次浏览
想要完成记事本,我们首先需要考虑一个正常的记事本都需要具有哪些功能,我们将这些功能按键添加到我们的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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包。Sklearn 主要用Python编写,建立在 Numpy、Scipy、Pandas 和 Matplotlib 的基础上,也用 Cython编写了一些核心算法来提高性能。
今天我们来说一说Python中如何实现对一个数字开平方。有三种解决办法、下面我们分别来演示,具体方法及代码如下:
1.reshape2.flatten3.ravel4.stack(1)concatenate(2)vstack(3)dstack(4)hstack(5)r,c模式5.split(1)split(2)vsplit和hsplit6.repeat(1)标量参数(2)列表参数7.tile(1)标量参数(2)元组参数8.sor
本文给大家分享的是关于python如何实现三边测量定位的内容,另外还有python opencv实现三角测量的示例,有需要的朋友可以参考,接下来我们直接看代码。
如何通过装饰器实现已有函数执行时间的统计?废话不多说,下面直接上代码
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008