教你如何使用Python Tkinter库制作记事本


Posted in Python onJune 10, 2021

Tkinter库制作记事本

现在为了创建这个记事本,你的系统中应该已经安装了 Python 3 和 Tkinter。您可以根据系统要求下载合适的python 包。成功安装 python 后,您需要安装 Tkinter(一个 Python 的 GUI 包)。

使用此命令安装 Tkinter :

pip install python-tk

导入 Tkinter :

import tkinter
import os
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

注意: messagebox用于在称为记事本的白框中写入消息,filedialog用于在您从系统中的任何位置打开文件或将文件保存在特定位置或位置时出现的对话框。

添加菜单:

# Add controls(widget) 
  
self.__thisTextArea.grid(sticky = N + E + S + W) 
  
# To open new file 
self.__thisFileMenu.add_command(label = "New", 
                                command = self.__newFile) 
  
# To open a already existing file 
self.__thisFileMenu.add_command(label = "Open", 
                                command = self.__openFile) 
  
# To save current file 
self.__thisFileMenu.add_command(label = "Save", 
                                command = self.__saveFile) 
  
# To create a line in the dialog 
self.__thisFileMenu.add_separator() 
  
# To terminate 
self.__thisFileMenu.add_command(label = "Exit", 
                                command = self.__quitApplication) 
self.__thisMenuBar.add_cascade(label = "File", 
                               menu = self.__thisFileMenu) 
  
# To give a feature of cut 
self.__thisEditMenu.add_command(label = "Cut", 
                                command = self.__cut) 
  
# To give a feature of copy 
self.__thisEditMenu.add_command(label = "Copy", 
                                command = self.__copy) 
  
# To give a feature of paste 
self.__thisEditMenu.add_command(label = "Paste", 
                                command = self.__paste) 
  
# To give a feature of editing 
self.__thisMenuBar.add_cascade(label = "Edit", 
                               menu = self.__thisEditMenu) 
  
# To create a feature of description of the notepad 
self.__thisHelpMenu.add_command(label = "About Notepad", 
                                command = self.__showAbout) 
self.__thisMenuBar.add_cascade(label = "Help", 
                               menu = self.__thisHelpMenu) 
  
self.__root.config(menu = self.__thisMenuBar) 
  
self.__thisScrollBar.pack(side = RIGHT, fill = Y) 
  
# Scrollbar will adjust automatically 
# according to the content 
self.__thisScrollBar.config(command = self.__thisTextArea.yview) 
self.__thisTextArea.config(yscrollcommand = self.__thisScrollBar.set)

使用此代码,我们将在记事本的窗口中添加菜单,并向其中添加复制、粘贴、保存等内容。

添加功能:

def __quitApplication(self): 
    self.__root.destroy() 
    # exit() 
  
def __showAbout(self): 
    showinfo("Notepad", "Mrinal Verma") 
  
def __openFile(self): 
          
    self.__file = askopenfilename(defaultextension=".txt", 
                                  filetypes=[("All Files","*.*"), 
                                      ("Text Documents","*.txt")]) 
  
    if self.__file == "": 
  
        # no file to open 
        self.__file = None
    else: 
        # try to open the file 
        # set the window title 
        self.__root.title(os.path.basename(self.__file) + " - Notepad") 
        self.__thisTextArea.delete(1.0,END) 
  
        file = open(self.__file,"r") 
  
        self.__thisTextArea.insert(1.0,file.read()) 
  
        file.close() 
  
          
def __newFile(self): 
    self.__root.title("Untitled - Notepad") 
    self.__file = None
    self.__thisTextArea.delete(1.0,END) 
  
def __saveFile(self): 
  
    if self.__file == None: 
        #save as new file 
        self.__file = asksaveasfilename(initialfile='Untitled.txt', 
                                        defaultextension=".txt", 
                                        filetypes=[("All Files","*.*"), 
                                            ("Text Documents","*.txt")]) 
  
        if self.__file == "": 
            self.__file = None
        else: 
              
            # try to save the file 
            file = open(self.__file,"w") 
            file.write(self.__thisTextArea.get(1.0,END)) 
            file.close() 
            # change the window title 
            self.__root.title(os.path.basename(self.__file) + " - Notepad") 
                  
              
    else: 
        file = open(self.__file,"w") 
        file.write(self.__thisTextArea.get(1.0,END)) 
        file.close() 
  
def __cut(self): 
    self.__thisTextArea.event_generate("<<Cut>>") 
  
def __copy(self): 
    self.__thisTextArea.event_generate("<<Copy>>") 
  
def __paste(self): 
    self.__thisTextArea.event_generate("<<Paste>>")

在这里,我们添加了记事本中所需的所有功能,您也可以添加其他功能,例如字体大小、字体颜色、粗体、下划线等。

合并后的主要代码:

import tkinter
import os
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *
 
 
class Notepad:
    __root = Tk()
 
    # default window width and height
    __thisWidth = 300
    __thisHeight = 300
    __thisTextArea = Text(__root)
    __thisMenuBar = Menu(__root)
    __thisFileMenu = Menu(__thisMenuBar, tearoff=0)
    __thisEditMenu = Menu(__thisMenuBar, tearoff=0)
    __thisHelpMenu = Menu(__thisMenuBar, tearoff=0)
 
    # To add scrollbar
    __thisScrollBar = Scrollbar(__thisTextArea)
    __file = None
 
    def __init__(self, **kwargs):
 
        # Set icon
        try:
            self.__root.wm_iconbitmap("Notepad.ico")
        except:
            pass
 
        # Set window size (the default is 300x300)
 
        try:
            self.__thisWidth = kwargs['width']
        except KeyError:
            pass
 
        try:
            self.__thisHeight = kwargs['height']
        except KeyError:
            pass
 
        # Set the window text
        self.__root.title("Untitled - Notepad")
 
        # Center the window
        screenWidth = self.__root.winfo_screenwidth()
        screenHeight = self.__root.winfo_screenheight()
 
        # For left-alling
        left = (screenWidth / 2) - (self.__thisWidth / 2)
 
        # For right-allign
        top = (screenHeight / 2) - (self.__thisHeight / 2)
 
        # For top and bottom
        self.__root.geometry('%dx%d+%d+%d' % (self.__thisWidth,
                                              self.__thisHeight,
                                              left, top))
 
        # To make the textarea auto resizable
        self.__root.grid_rowconfigure(0, weight=1)
        self.__root.grid_columnconfigure(0, weight=1)
 
        # Add controls (widget)
        self.__thisTextArea.grid(sticky=N + E + S + W)
 
        # To open new file
        self.__thisFileMenu.add_command(label="New",
                                        command=self.__newFile)
 
        # To open a already existing file
        self.__thisFileMenu.add_command(label="Open",
                                        command=self.__openFile)
 
        # To save current file
        self.__thisFileMenu.add_command(label="Save",
                                        command=self.__saveFile)
 
        # To create a line in the dialog
        self.__thisFileMenu.add_separator()
        self.__thisFileMenu.add_command(label="Exit",
                                        command=self.__quitApplication)
        self.__thisMenuBar.add_cascade(label="File",
                                       menu=self.__thisFileMenu)
 
        # To give a feature of cut
        self.__thisEditMenu.add_command(label="Cut",
                                        command=self.__cut)
 
        # to give a feature of copy
        self.__thisEditMenu.add_command(label="Copy",
                                        command=self.__copy)
 
        # To give a feature of paste
        self.__thisEditMenu.add_command(label="Paste",
                                        command=self.__paste)
 
        # To give a feature of editing
        self.__thisMenuBar.add_cascade(label="Edit",
                                       menu=self.__thisEditMenu)
 
        # To create a feature of description of the notepad
        self.__thisHelpMenu.add_command(label="About Notepad",
                                        command=self.__showAbout)
        self.__thisMenuBar.add_cascade(label="Help",
                                       menu=self.__thisHelpMenu)
 
        self.__root.config(menu=self.__thisMenuBar)
 
        self.__thisScrollBar.pack(side=RIGHT, fill=Y)
 
        # Scrollbar will adjust automatically according to the content
        self.__thisScrollBar.config(command=self.__thisTextArea.yview)
        self.__thisTextArea.config(yscrollcommand=self.__thisScrollBar.set)
 
    def __quitApplication(self):
        self.__root.destroy()
        # exit()
 
    def __showAbout(self):
        showinfo("Notepad", "Mrinal Verma")
 
    def __openFile(self):
 
        self.__file = askopenfilename(defaultextension=".txt",
                                      filetypes=[("All Files", "*.*"),
                                                 ("Text Documents", "*.txt")])
 
        if self.__file == "":
 
            # no file to open
            self.__file = None
        else:
 
            # Try to open the file
            # set the window title
            self.__root.title(os.path.basename(self.__file) + " - Notepad")
            self.__thisTextArea.delete(1.0, END)
 
            file = open(self.__file, "r")
 
            self.__thisTextArea.insert(1.0, file.read())
 
            file.close()
 
    def __newFile(self):
        self.__root.title("Untitled - Notepad")
        self.__file = None
        self.__thisTextArea.delete(1.0, END)
 
    def __saveFile(self):
 
        if self.__file == None:
            # Save as new file
            self.__file = asksaveasfilename(initialfile='Untitled.txt',
                                            defaultextension=".txt",
                                            filetypes=[("All Files", "*.*"),
                                                       ("Text Documents", "*.txt")])
 
            if self.__file == "":
                self.__file = None
            else:
 
                # Try to save the file
                file = open(self.__file, "w")
                file.write(self.__thisTextArea.get(1.0, END))
                file.close()
 
                # Change the window title
                self.__root.title(os.path.basename(self.__file) + " - Notepad")
 
 
        else:
            file = open(self.__file, "w")
            file.write(self.__thisTextArea.get(1.0, END))
            file.close()
 
    def __cut(self):
        self.__thisTextArea.event_generate("<<Cut>>")
 
    def __copy(self):
        self.__thisTextArea.event_generate("<<Copy>>")
 
    def __paste(self):
        self.__thisTextArea.event_generate("<<Paste>>")
 
    def run(self):
 
        # Run main application
        self.__root.mainloop()
 
    # Run main application
 
 
notepad = Notepad(width=600, height=400)
notepad.run()

要运行此代码,请使用扩展名.py保存它,然后打开 cmd(命令提示符)并移动到保存文件的位置,然后编写以下内容

python "filename".py

然后按回车,它就会运行。或者可以通过简单地双击您的.py扩展文件直接运行。

教你如何使用Python Tkinter库制作记事本

到此这篇关于教你如何使用Python Tkinter库制作记事本的文章就介绍到这了,更多相关Tkinter库制作记事本内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
Python使用getpass库读取密码的示例
Oct 10 Python
Python元字符的用法实例解析
Jan 17 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python 检查文件mime类型的方法
Dec 08 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
如何对python的字典进行排序
Jun 19 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python发送邮件实现基础解析
Aug 14 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 #Python
Pytorch可视化的几种实现方法
OpenCV-Python实现怀旧滤镜与连环画滤镜
OpenCV-Python实现轮廓的特征值
Jun 09 #Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 #Python
Python的这些库,你知道多少?
OpenCV-Python使用cv2实现傅里叶变换
You might like
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP7修改的函数
2021/03/09 PHP
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python使用建议与技巧分享(二)
2020/08/17 Python
python制作微博图片爬取工具
2021/01/16 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
消防安全标语
2014/06/07 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书