Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 Tkinter를 사용하여 메모장 개발

<시간/>

Tkinter는 여러 GUI 앱을 만들 수 있는 Python의 GUI 라이브러리입니다. 여기서는 tkinter를 사용하여 텍스트 편집기와 같은 메모장을 개발합니다. 이 메모장에는 새 파일 생성, 기존 파일 열기, 파일 저장, 편집, 잘라내기 및 붙여넣기 등 모든 기능을 수행할 수 있는 메뉴가 있습니다.

전제 조건

  • Python이 설치되었습니다.
  • Tkinter가 설치되었습니다.

참고 :tkinter는 python 3.x와 함께 표준 라이브러리로 제공됩니다.

메뉴 항목 추가:

메모장에는 파일, 편집, 명령 및 도움말의 네 가지 기본 메뉴 항목이 있습니다. 파일 메뉴 항목에는 새로 만들기, 열기, 저장 및 종료의 4가지 하위 항목이 있습니다.

파이썬에서 Tkinter를 사용하여 메모장 개발

편집 메뉴 항목에는 잘라내기, 복사 및 붙여넣기의 세 가지 하위 항목이 있습니다.

파이썬에서 Tkinter를 사용하여 메모장 개발

명령 메뉴 항목에는 명령 정보,

라는 하나의 하위 항목이 있습니다.

파이썬에서 Tkinter를 사용하여 메모장 개발

그리고 도움말 메뉴에는 메모장 정보

라는 하위 항목이 하나 있습니다.

파이썬에서 Tkinter를 사용하여 메모장 개발

아래 코드를 사용하여 이러한 많은 메뉴 항목 및 하위 항목을 제공할 것입니다 -

# 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.__thisCommandMenu.add_command(label = "About Commands", command=self.__showCommand)
      self.__thisMenuBar.add_cascade(label="Commands", menu=self.__thisCommandMenu)
      self.__thisMenuBar.add_cascade(label="Help", menu=self.__thisHelpMenu)

각 메뉴 항목에 기능 추가

이제 메뉴 항목이 준비되었으므로 이제 각 메뉴 항목에 기능을 추가할 것입니다. 기능 목록 아래에 이 메모장에 추가할 예정입니다(물론 다른 많은 기능도 추가할 수 있음).

  • 파일 열기
  • 새 파일
  • 파일 저장
  • 응용 프로그램 종료
  • 소개
  • 명령 표시
  • 잘라내기
  • 복사
  • 붙여넣기

아래는 위에서 언급한 기능을 구현할 코드입니다. −

def __quitApplication(self):
   self.__root.destroy()
   # exit()
def __showAbout(self):
   showinfo("About Notepad","Simple text editor like notepad using Python")
def __showCommand(self):
   showinfo("Notepad", "Just Another TextPad \n Copyright \n with BSD license you can use it'")
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>>")

이제 필수 패키지를 추가했고 메뉴 항목과 tkinter 라이브러리를 사용하여 메모장과 같은 텍스트 편집기에서 보게 될 필수 기능을 추가했습니다.

다음은 tkinter를 사용하여 메모장 텍스트 편집기를 만드는 전체 프로그램입니다 -

#Import os library
import os
#import everything from tkinter
from tkinter import *
#To get the space above the message
from tkinter.messagebox import *
#To get the dialog box to open when required
from tkinter.filedialog import *
class Notepad:
   # Set up the root widget
   __root = Tk()
   __thisWidth = 500
   __thisHeight = 700
   __thisTextArea = Text(__root)
   __thisMenuBar = Menu(__root)
   __thisFileMenu = Menu(__thisMenuBar, tearoff=0)
   __thisEditMenu = Menu(__thisMenuBar, tearoff=0)
   __thisHelpMenu = Menu(__thisMenuBar, tearoff=0)
   __thisCommandMenu = Menu(__thisMenuBar, tearoff=0)
   # To add scrollbar
   __thisScrollBar = Scrollbar(__thisTextArea)
   __file = None
   def __init__(self,**kwargs):
      # icon
      try:
         self.__root.wm_iconbitmap("Notepad.ico")
      except:
         pass
   # Set window size as mentioned above (the default is 300x300)
   try:
      self.__thisWidth = kwargs['width']
      except KeyError:
      pass
   try:
      self.__thisHeight = kwargs['height']
      except KeyError:
      pass
      # 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.__thisCommandMenu.add_command(label = "About Commands", command=self.__showCommand)
      self.__thisMenuBar.add_cascade(label="Commands", menu=self.__thisCommandMenu)
      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("About Notepad","Simple text editor like notepad using Python")
   def __showCommand(self):
      showinfo("Notepad", "Just Another TextPad \n Copyright \n with BSD license you can use it'")
   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()

위의 프로그램을 실행하면 다음과 같은 팝업 메모장 텍스트 편집기가 나타납니다.

파이썬에서 Tkinter를 사용하여 메모장 개발

이 메모장에서 메모장에 쓰고 저장하고 저장된 파일(또는 다른 파일)을 열 수 있습니다. 열려 있는 파일 내용에서 잘라내기, 복사 및 붙여넣기를 만들 수 있습니다. 새로 생성된 이 메모장의 모든 메뉴 항목을 사용할 수 있습니다.