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

时间:2022-11-20 09:33:02

Tkinter库制作记事本

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

使用此命令安装 Tkinter :

?
1
pip install python-tk

导入 Tkinter :

?
1
2
3
4
5
import tkinter
import os
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

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

添加菜单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 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)

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

添加功能:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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>>")

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

合并后的主要代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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(命令提示符)并移动到保存文件的位置,然后编写以下内容

?
1
python "filename".py

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

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

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

原文链接:https://blog.csdn.net/allway2/article/details/117706878