python小項目之文本編輯器

来源:https://www.cnblogs.com/featherl/archive/2019/06/24/11075038.html
-Advertisement-
Play Games

高考完後這麼就才想起這系列教程,實在抱歉,現在該來繼續教程了。 本節利用前面所學知識,來完成一個小工具——文本編輯器! ...


高考完後這麼就才想起這系列教程,實在抱歉,現在該來繼續教程了。
本節利用前面所學知識,來完成一個小工具——文本編輯器!

tkinter

在實現文本編輯器之前,先來瞭解下tkinter這個python庫。

tkinter庫用來實現GUI程式(Graphical User Interface 圖形用戶界面),我們實現的文本編輯器是有圖形的,類似windows系統下的記事本。

當然啦,寫GUI程式不只有tkinter庫,還有更為強大的pyqt、wxpython等,不過對於本節實現編輯器來說,簡單的tkinter庫就已經足夠了,而且windows安裝的python一般自帶了這個庫,不必另外安裝。

實現文本編輯器

第一步——界面

首先,我們先把編輯器的圖形界面寫好。

什麼?還沒說tkinter庫怎麼用就開工了?@_@

別慌!很簡單,看下麵代碼,相信註釋很清楚了:

import tkinter
# 導入tkinter庫


win = tkinter.Tk()  # 創建視窗
win.title('文本編輯器')  # 設置標題

entry_file = tkinter.Entry(win)  # 創建一個文本輸入框,用來設置文件路徑
entry_file.pack()  # 放置該輸入框

def do_open():
    # 打開文件
    pass
def do_save():
    # 保存文件
    pass

btn_open = tkinter.Button(win, text='打開', command=do_open)  # 創建按鈕用於打開文件
btn_save = tkinter.Button(win, text='保存', command=do_save)  # 創建按鈕用於保存文件

# 放置按鈕
btn_open.pack()
btn_save.pack()


# 創建多行文本框,用於編輯文件
text = tkinter.Text(win)
text.pack() 

win.mainloop()  # 進入消息迴圈

使用tkinter創建GUI程式,一般有以下框架:

win = tkinter.Tk()  # 創建視窗

# 界面的佈局,如添加按鈕、文本框等等

win.mainloop()  # 進入消息迴圈

現在不必理解這個框架,我們就照著寫就好了。

現在對其中的一些地方做下解釋,一般創建控制項(按鈕,文本框等稱為控制項)的第一個參數為所在的容器,我們的程式里的控制項都在主視窗里,也就是win對象。

我們首先創建了一個文本輸入框,用來設置要操作文件的路徑。

創建按鈕可以使用關鍵字參數text來設置按鈕的標簽(顯示的文字),用關鍵字參數command來設置點擊按鈕所做的事,我們分別創建了兩個按鈕,一個用來打開文件,一個用來保存文件。

最後創建了一個多行文本框,用於文件的編輯。

運行程式,視窗大致如下:
文本編輯器界面

大家的界面的樣式可能有點不一樣,這個因操作系統環境而異
(本人比較懶,因為本節重點不是圖形界面,所以沒有去規劃界面的佈局,僅僅把控制項直接隨意放置,如有興趣,可以自己搜索tkinter的具體用法,畫一個比這個好看得多的界面^_^

第二步——打開文件

現在我們來實現打開文件這個功能,還記得前面有一句這樣的代碼嗎?

btn_open = tkinter.Button(win, text='打開', command=do_open)  # 創建按鈕用於打開文件

我們給創建按鈕的tkinter.Button函數(實際上這不是函數),傳遞了一個參數command=do_open,該參數用於設置當按鈕被點擊時自動調用的函數,所以我們的重點就是實現這個當點擊時自動調用的do_open函數。

打開文件的流程是怎麼樣的呢?

  1. 首先,我們要知道文件的路徑,先從文本輸入框輸入文件的路徑
  2. 點擊打開按鈕
  3. 點擊打開按鈕幕後將文件打開,讀取文件內容,把文件內容顯示d奧多行文本框中

其實我們的do_open函數就是上面的第三步,打開文件=>讀取數據=>顯示數據

具體代碼如下:

def do_open():
    # 打開文件
    file_path = entry_file.get()  # 獲取文本框的內容
    with open(file_path) as fr:
        # 打開文件
        content = fr.read()  #一次性讀取文件內容,對大文件不宜使用
        text.delete(0.0, tkinter.END)  # 清空文本框內容
        text.insert(tkinter.END, content)  # 在游標後插入內容

首先我們通過file_path = entry_file.get()獲取到了文本輸入框的內容作為文件的路徑,用with代碼塊打開文件,讀取文件數據後,將數據插入到多行文本框顯示。

在插入數據之前,先使用text.delete(0.0, tkinter.END)清空文本框,這裡就不多解釋了。具體用法可以自己查查。

示例如下(這裡我打開了python源碼文件本身):
打開文件

第三步——保存文件

保存文件的功能實現類似打開文件,點擊保存按鈕後:獲取多行文本框內容=>打開文件=>寫入文件

話不多說,上代碼!

def do_save():
    # 保存文件
    content = text.get(0.0, tkinter.END)  # 獲取文本框內容
    file_path = entry_file.get()  # 文件路徑
    with open(file_path, 'w') as fw:
        fw.write(content)  # 寫入數據到文件中

gif動圖演示:
保存文件

首先我在多行文本框中輸入了abcdefghijk,在文本輸入框輸入文件路徑1.txt,然後點擊保存。

之後把多行文本框的內容都刪掉,再打開1.txt文件,可以看到剛剛輸入的abcdefghijk內容,瀏覽目錄也可以發現,當前目錄下確實多了一個1.txt文件,可以用記事本查看,文件確實保存成功!

完整代碼

現貼出完整的代碼:

import tkinter
# 導入tkinter庫


win = tkinter.Tk()  # 創建視窗
win.title('文本編輯器')  # 設置標題

entry_file = tkinter.Entry(win)  # 創建一個文本輸入框
entry_file.pack()  # 放置該輸入框

def do_open():
    # 打開文件
    file_path = entry_file.get()  # 獲取文本框的內容
    with open(file_path) as fr:
        # 打開文件
        content = fr.read()  #一次性讀取文件內容,對大文件不宜使用
        text.delete(0.0, tkinter.END)  # 清空文本框內容
        text.insert(tkinter.END, content)  # 在游標後插入內容

def do_save():
    # 保存文件
    content = text.get(0.0, tkinter.END)  # 獲取文本框內容
    file_path = entry_file.get()  # 文件路徑
    with open(file_path, 'w') as fw:
        fw.write(content)



btn_open = tkinter.Button(win, text='打開', command=do_open)  # 創建按鈕用於打開文件
btn_save = tkinter.Button(win, text='保存', command=do_save)  # 創建按鈕用於保存文件

# 放置按鈕
btn_open.pack()
btn_save.pack()


# 創建多行文本框,用於編輯文件
text = tkinter.Text(win)
text.pack() 

win.mainloop()  # 進入消息迴圈

總結

這個小工具很簡單(也很醜 ( ̄_, ̄ )),但也將文件讀寫的知識應用到了實際。

如果大家對tkinter有興趣的話,可以自己搜索學習,相信大家能做出有趣的程式來。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Object構造函數和對象字面量都可以用來創建單個對象,但是在創建多個對象時,會產生大量重覆代碼. 1.工廠模式 工廠模式抽象了創建具體對象的過程.由於ECMAScript無法創建類,我們用函數來封裝 以特定介面創建對象 的細節. 2.構造函數模式 用來創建特定類型的對象,比如Object/Arr ...
  • 舉個慄子 問題描述 可以給人搭配嘻哈服或白領裝的程式。 簡單實現 代碼 測試結果 存在缺陷 如果需要增加“超人”裝扮,會導致需要修改“Person”類,違背了 開放 封閉原則 簡單實現進化版 代碼 測試結果 存在問題 現在如果要加超人裝扮,只要增加子類就可以了,但是這麼做雖然把“服裝”類和“人”類分 ...
  • Collection介面中的常用方法: * 所有的子類子介面都是具有的 * 集合的方法:增刪改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * public boolean remove(Object o);//刪除元素,返回值表示是否刪除成功 * ...
  • 文章首發: "進程知多少?" @[toc] Java 多線程系列文章第 1 篇 要講線程,一般都得講一講進程,進程是何方神聖呢?下麵來簡單介紹一下。 先通過任務管理器看看 Windows 系統下的進程。 從圖片來看,每一個進程都占有 CPU、記憶體、磁碟、網路等資源。 站在操作系統的角度,進程是分配資 ...
  • 到現在,我們已經完成了POS平臺和前端的網路集成。不過,還是那句話:平臺系統的網路安全是至關重要的。前一篇博客里我們嘗試實現了gRPC ssl/tls網路連接,但測試時用的證書如何產生始終沒有搞清楚。現在akka-http開發的ws同樣面臨HTTPS的設置和使用問題。所以,特別抽出這篇博文討論一下數 ...
  • 本文介紹簡單介紹socket的常用函數,並以python-kafka中的源碼socketpair為例,來講解python socket的運用 ...
  • static是java中很常用的一個關鍵字,使用場景也很多,本文主要介紹了它的五種用法,static變數,static方法,static代碼塊,static內部類,static包內導入,在一定環境下使用,可以提高程式的運行性能,優化程式的結構 ...
  • 所屬網站分類: 資源下載 > python視頻教程 作者:外星人入侵 鏈接: http://www.pythonheidong.com/blog/article/435/ 來源:python黑洞網 www.pythonheidong.com python入門教程-1-Python編程語言歷史及特性. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...