用python制作一個微型文本編輯器


Tkinter是一個Python標准GUI(圖形用戶界面)工具包,本篇我們就用Tkinter來制作一個微型文本編輯器。

這個文本編輯器要有四個基本功能:

  1. 讓用戶能夠打開指定的文本文件
  2. 讓用戶能夠編輯文本文件
  3. 讓用戶能夠保存文本文件
  4. 讓用戶能夠退出

首先我們先繪制一個用戶界面草圖:

 

 

 它的使用方法是:

  1. 在按鈕左邊的文本框中輸入文件名,再單擊Open按鈕打開這個文件,它包含的文本將出現在底部的文本框中
  2. 在底部的大型文本框中,你可隨心所欲地編輯文本
  3. 要保存所做的修改,可單擊Save按鈕,這將把大型文本框的內容寫入到頂部文本框指定的文件中
  4. 沒有Quit(退出)按鈕,用戶只能使用默認Tkinter菜單中的Quit命令來退出程序

首先來看制作這個編輯器需要的基礎知識:

一、基本構建

首先,導入tkinter:

from tkinter import *

創建一個將充當主窗口的頂級組件:

top = Tk()

創建按鈕,實例化Button類:

btn = Button()

調用布局管理器pack:

btn.pack()

給按鈕指定文本:

btn['text'] = 'Click me!'

就這樣:

 

 

 出來效果長這樣:

 

 

 接着給按鈕添加行為:

def clicked():
... print('I was clicked!')
...
btn['command'] = clicked

這時點擊click me的按鈕,交互器里就會彈出:

 

 

 二、布局

 

對控件調用方法pack時,將把控件放在其父控件(主控件)中。要指定主控件,可使用構造函數的第一個可選參數;如果沒有指定,將把頂級主窗口用作主控件:

1 Label(text="I'm in the first window!").pack()
2 second = Toplevel()
3 Label(second, text="I'm in the second window!").pack()

其中Toplevel類表示除主窗口外的另一個頂級窗口,而Label就是文本標簽。

出來效果就是這樣:

 

 沒有提供任何參數時,pack從窗口頂部開始將控件堆疊成一列,並讓它們在窗口中水平居中。比如如果你用一個循環:

for i in range(10):
    Button(text=i).pack()

就會變成這樣:

 

 不過我們可以調整控件的位置和拉伸方式,具體使用的方法用help指令來看:

>>> help(Pack.config)
>>> help(Grid.configure)
>>> help(Place.config)

三、事件處理

可通過設置屬性command給按鈕指定動作(action)。這是一種特殊的事件處理,但Tkinter還提供了更通用的事件處理機制:方法bind。要讓控件對特定的事件進行處理,可對其調用方法bind,並指定事件的名稱和要使用的函數:

1 from tkinter import *
2 top = Tk()
3 def callback(event):
4     print(event.x, event.y)
5 top.bind('<Button-1>', callback)
6 '4322424456callback'

其中<Button-1>是使用鼠標左按鈕(按鈕1)單擊的事件名稱。我們將這種事件關聯到函數callback。這樣,每當用戶在窗口top中單擊時,都將調用這個函數。

具體的使用和調整可以參考:

>>> help(Tk.bind)

 

至此,相關的基礎知識就介紹完畢了,最后回到開頭那個微型文本編輯器,它的完整代碼如下:

 1 from tkinter import *
 2 from tkinter.scrolledtext import ScrolledText
 3 def load():
 4     with open(filename.get()) as file:
 5         contents.delete('1.0', END)
 6         contents.insert(INSERT, file.read())
 7 def save():
 8     with open(filename.get(), 'w') as file:
 9         file.write(contents.get('1.0', END))
10 top = Tk()
11 top.title("Simple Editor")
12 contents = ScrolledText()
13 contents.pack(side=BOTTOM, expand=True, fill=BOTH)
14 filename = Entry()
15 filename.pack(side=LEFT, expand=True, fill=X)
16 Button(text='Open', command=load).pack(side=LEFT)
17 Button(text='Save', command=save).pack(side=LEFT)
18 mainloop()

運行效果如下:

 

 這樣,一個微型文本編輯器就完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM