网络编程
位置:首页>> 网络编程>> Python编程>> 教你如何使用Python Tkinter库制作记事本

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

作者:allway2  发布时间:2023-06-27 21:57:30 

标签:Python,Tkinter库

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库制作记事本

来源:https://blog.csdn.net/allway2/article/details/117706878

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com