最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你30分鐘使用Python制作自己的記事本

 更新時間:2026年02月06日 08:47:18   作者:忘憂記  
這篇文章主要為大家詳細介紹了30分鐘如何使用Python制作自己的記事本,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

第一步:為什么我們需要「基礎窗口」?(新手必懂?。?/h2>

常見錯誤:直接寫window.show()但窗口不顯示?

正確邏輯:程序運行流程圖

代碼詳解(逐行解釋)

import sys  # 必須!用于接收系統(tǒng)參數(shù)(比如文件路徑)
from PyQt6.QtWidgets import QApplication, QMainWindow  # 從PyQt庫導入兩個核心組件

# 1?? 創(chuàng)建應用對象(靈魂!所有PyQt程序必須有)
app = QApplication(sys.argv)  # sys.argv = 系統(tǒng)傳遞的命令行參數(shù)(比如打開的文件名)

# 2?? 創(chuàng)建主窗口(你的「畫布」)
window = QMainWindow()  # 100% 會用到的窗口類型
window.setWindowTitle("我的迷你記事本")  # 設置標題(為什么叫"窗口"?因為它是所有UI的容器?。?
window.resize(500, 400)  # 設置大?。▽?00px, 高400px)

# 3?? 顯示窗口(關鍵!)
window.show()  # ? 為什么必須寫?因為窗口默認是「隱形」的!
# ? 如果不寫這行,程序會直接結束,你永遠看不到窗口!

# 4?? 進入事件循環(huán)(讓程序「活」起來)
sys.exit(app.exec())  # ? 為什么叫「事件循環(huán)」?因為程序會一直監(jiān)聽用戶操作(點擊、輸入等)

思考題:

如果我刪掉 sys.exit(app.exec()) 會怎樣?

答案:程序會立刻結束!你只能看到一閃而過的窗口(就像打開一個網(wǎng)頁立刻關閉)。

第二步:為什么需要QTextEdit?(小白必看?。?/h2>

常見錯誤:用QLineEdit(單行輸入框)做記事本 → 無法輸入多行文字!

正確選擇:QTextEdit= 專為多行文本設計的編輯器

代碼詳解(添加編輯器):

from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit  # 新增導入

app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle("我的迷你記事本")
window.resize(700, 500)  # 寬高調(diào)大一點(記事本需要更多空間)

# ? 關鍵步驟:把編輯器設置為窗口的「中央內(nèi)容」
editor = QTextEdit()  # 創(chuàng)建編輯器對象
window.setCentralWidget(editor)  # 設置為窗口的主區(qū)域

# ? 為什么叫「中央」?因為窗口可以有頂部菜單、底部狀態(tài)欄,編輯器占中間大塊

思考題:

如果我把 window.setCentralWidget(editor) 寫成 window.setWidget(editor) 會怎樣?

答案:報錯!setCentralWidget 是 QMainWindow 的專屬方法(PyQt 設計的規(guī)范)。

第三步:菜單欄怎么設計?(不是復制粘貼?。?/h2>

常見錯誤:直接寫menubar = menuBar()→ 無菜單!

正確邏輯:菜單 = 1個主菜單 + 多個子菜單項

代碼詳解(分步構建菜單):

# 1?? 創(chuàng)建菜單欄(必須先有窗口才有菜單欄)
menubar = window.menuBar()  # 獲取窗口的菜單欄對象

# 2?? 添加「文件」主菜單(為什么叫「主菜單」?因為它在最左邊)
file_menu = menubar.addMenu("文件")  # 創(chuàng)建菜單項

# 3?? 在「文件」里添加子菜單(每個子菜單是用戶點擊的按鈕)
open_action = file_menu.addAction("打開文件")  # 添加「打開」按鈕
save_action = file_menu.addAction("保存文件")  # 添加「保存」按鈕

# 4?? 設置快捷鍵(為什么需要?因為用戶習慣Ctrl+S?。?
save_action.setShortcut("Ctrl+S")  # 40% 用戶會用快捷鍵

思考題:

為什么「打開」和「保存」要用 addAction 而不是 addButton?

答案QAction 是 PyQt 的統(tǒng)一事件處理單元(不是按鈕!),它能綁定到菜單/按鈕/工具欄。

第四步:實現(xiàn)「打開文件」功能(關鍵?。?/h2>

常見錯誤:忘記with open→ 文件沒關閉 → 內(nèi)存泄漏!

正確邏輯:用戶點擊 → 彈出文件選擇框 → 讀取文件 → 顯示到編輯器

代碼詳解(帶思考注釋):

def open_file(self):
    # ? 為什么用 QFileDialog.getOpenFileName?因為這是PyQt的標準文件選擇器
    path, _ = QFileDialog.getOpenFileName(
        self,  # 父窗口(確保彈窗在記事本內(nèi)部)
        "打開文件",  # 窗口標題
        "",  # 默認打開路徑(留空表示當前目錄)
        "Text Files (*.txt);;All Files (*)"  # 文件過濾器(顯示.txt和所有文件)
    )
    
    # ? 為什么需要檢查 path?因為用戶可能點了「取消」!
    if path:
        # ? 為什么用 'r' 和 utf-8?因為讀取文本文件,且支持中文
        with open(path, 'r', encoding='utf-8') as f:
            self.editor.setText(f.read())  # 將文件內(nèi)容放入編輯器
        
        # ? 為什么更新狀態(tài)欄?讓用戶知道發(fā)生了什么
        self.statusBar().showMessage(f"已打開: {path}")

思考題:

如果用戶打開一個 .jpg 文件會怎樣?

答案:程序會崩潰!因為 f.read() 讀的是二進制,不是文本。這就是為什么需要文件過濾器"Text Files (*.txt)")。

第五步:實現(xiàn)「字數(shù)統(tǒng)計」(小白最愛的功能?。?/h2>

常見錯誤:用self.editor.text()→ 會包含HTML標簽!

正確邏輯:實時監(jiān)聽文字變化 → 計算純文本字數(shù)

代碼詳解(關鍵在textChanged信號):

# 1?? 初始化狀態(tài)欄(在 initUI 里)
self.statusBar().showMessage("準備就緒")  # 初始狀態(tài)

# 2?? 監(jiān)聽文字變化(核心?。?
self.editor.textChanged.connect(self.update_status)  # 當文字變化時,自動調(diào)用 update_status

# 3?? 實現(xiàn)統(tǒng)計函數(shù)
def update_status(self):
    text = self.editor.toPlainText()  # ? 為什么用 toPlainText?因為這是純文本!
    char_count = len(text)  # 字符數(shù)(含空格)
    line_count = len(text.split('\n'))  # 行數(shù)(按換行符分割)
    
    # 更新狀態(tài)欄(為什么用 f-string?因為可讀性高!)
    self.statusBar().showMessage(f"字數(shù): {char_count} | 行數(shù): {line_count}")

思考題:

為什么 text.split('\n') 能算行數(shù)?如果用戶用的是 \r\n(Windows換行符)會怎樣?

答案split('\n') 會把 \r\n 當成兩個字符,導致行數(shù)多1。正確做法:用 text.splitlines()(PyQt內(nèi)置方法,自動處理換行符)。

第六步:為什么需要「類結構」?(小白的終極困惑)

常見錯誤:把所有代碼寫在全局(導致變量混亂?。?/p>

正確邏輯:用類封裝所有功能→ 代碼清晰 + 方便綁定槽函數(shù)

為什么這樣寫?

class SimplePad(QMainWindow):  # 繼承自QMainWindow(讓記事本擁有窗口能力)
    def __init__(self):
        super().__init__()  # 初始化父類(必須!)
        self.initUI()  # 自己寫的初始化方法

    def initUI(self):
        # 這里放所有界面初始化代碼(窗口、編輯器、菜單等)
        # ? 為什么不用全局變量?因為:1. 代碼可讀性高 2. 便于多人協(xié)作 3. 避免變量覆蓋

思考題:

如果我刪掉 super().__init__() 會怎樣?

答案:窗口會報錯!因為 QMainWindow 的初始化邏輯沒執(zhí)行(PyQt要求必須調(diào)用父類構造函數(shù))。

最終代碼(完整版,帶詳細注釋)

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QFileDialog, QFontDialog, QMenuBar, QStatusBar

class SimplePad(QMainWindow):
    def __init__(self):
        super().__init__()  # 1?? 必須初始化父類
        self.initUI()  # 2?? 初始化界面

    def initUI(self):
        # ?? 1. 設置窗口基礎屬性
        self.setWindowTitle("SimplePad - 我的第一個記事本")
        self.resize(800, 600)  # 更大的窗口(方便看字數(shù))

        # ?? 2. 創(chuàng)建文本編輯器(核心?。?
        self.editor = QTextEdit()
        self.setCentralWidget(self.editor)  # 設置為窗口中央內(nèi)容

        # ?? 3. 創(chuàng)建菜單欄(分步驟構建)
        menubar = self.menuBar()  # 獲取菜單欄
        
        # 文件菜單
        file_menu = menubar.addMenu("文件")
        file_menu.addAction("新建").triggered.connect(self.editor.clear)  # 新建 → 清空
        file_menu.addAction("打開").triggered.connect(self.open_file)  # 打開 → 綁定函數(shù)
        save_action = file_menu.addAction("保存")
        save_action.setShortcut("Ctrl+S")  # 快捷鍵
        save_action.triggered.connect(self.save_file)  # 保存 → 綁定函數(shù)

        # 格式菜單
        format_menu = menubar.addMenu("格式")
        format_menu.addAction("字體設置").triggered.connect(self.change_font)

        # ?? 4. 狀態(tài)欄(字數(shù)統(tǒng)計)
        self.statusBar().showMessage("準備就緒")
        self.editor.textChanged.connect(self.update_status)  # 關鍵!監(jiān)聽文字變化

    # ?? 5. 打開文件(帶錯誤處理)
    def open_file(self):
        path, _ = QFileDialog.getOpenFileName(
            self, "打開文件", "", "Text Files (*.txt);;All Files (*)"
        )
        if path:  # ? 檢查用戶是否選擇了文件
            with open(path, 'r', encoding='utf-8') as f:
                self.editor.setText(f.read())
            self.statusBar().showMessage(f"已打開: {path}")

    # ?? 6. 保存文件(帶用戶友好提示)
    def save_file(self):
        path, _ = QFileDialog.getSaveFileName(
            self, "保存文件", "", "Text Files (*.txt)"
        )
        if path:
            content = self.editor.toPlainText()  # ? 純文本!
            with open(path, 'w', encoding='utf-8') as f:
                f.write(content)
            self.statusBar().showMessage(f"已保存: {path}")

    # ?? 7. 字體設置(用標準對話框)
    def change_font(self):
        font, ok = QFontDialog.getFont()
        if ok:
            self.editor.setFont(font)

    # ?? 8. 字數(shù)統(tǒng)計(實時更新?。?
    def update_status(self):
        text = self.editor.toPlainText()
        char_count = len(text)
        line_count = len(text.splitlines())  # ? 正確處理換行符!
        self.statusBar().showMessage(f"字數(shù): {char_count} | 行數(shù): {line_count}")

# ?? 啟動程序
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = SimplePad()
    window.show()
    sys.exit(app.exec())

以上就是教你30分鐘使用Python制作自己的記事本的詳細內(nèi)容,更多關于Python記事本的資料請關注腳本之家其它相關文章!

相關文章

  • Python pyecharts模塊安裝與入門教程

    Python pyecharts模塊安裝與入門教程

    Echarts 是一個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發(fā)者的認可,這篇文章主要介紹了Python pyecharts數(shù)據(jù)可視化模塊安裝與入門教程,需要的朋友可以參考下
    2022-09-09
  • Python 運行 shell 獲取輸出結果的實例

    Python 運行 shell 獲取輸出結果的實例

    今天小編就為大家分享一篇Python 運行 shell 獲取輸出結果的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 利用Python實現(xiàn)在PDF文檔中插入文字水印

    利用Python實現(xiàn)在PDF文檔中插入文字水印

    在傳播PDF文檔的過程中,如何有效地保護文檔的版權和所有權,防止非法復制和濫用,成為了一個不可忽視的問題,所以給PDF文檔添加水印便成了一種行之有效的保護手,本文將展示如何使用Python在PDF文檔中插入文字水印,實現(xiàn)高效的PDF文檔處理,需要的朋友可以參考下
    2024-04-04
  • 一文帶你解鎖Python文件匹配技巧

    一文帶你解鎖Python文件匹配技巧

    在日常的文件操作和數(shù)據(jù)處理中,文件匹配是一個非常常見的任務,本文將詳細介紹如何使用?Python?實現(xiàn)文件匹配,有需要的小伙伴可以參考下
    2024-12-12
  • Python對象的底層實現(xiàn)源碼學習

    Python對象的底層實現(xiàn)源碼學習

    這篇文章主要為大家介紹了Python對象的底層實現(xiàn)源碼學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java文件與類動手動腦實例詳解

    Java文件與類動手動腦實例詳解

    在本篇文章里小編給大家整理的是關于Java文件與類動手動腦實例知識點,有需要的朋友們學習參考下。
    2019-11-11
  • Python3.5 win10環(huán)境下導入kera/tensorflow報錯的解決方法

    Python3.5 win10環(huán)境下導入kera/tensorflow報錯的解決方法

    這篇文章主要介紹了Python3.5 win10環(huán)境下導入keras/tensorflow報錯的解決方法,較為詳細的分析了Python3.5在win10環(huán)境下導入keras/tensorflow提示錯誤的原因與相關解決方法,需要的朋友可以參考下
    2019-12-12
  • 2026年最值得投入學習的PythonAI框架top10排行榜

    2026年最值得投入學習的PythonAI框架top10排行榜

    本文推薦了2026年最值得投入學習的PythonAI框架,從Num社區(qū)活躍度、生產(chǎn)就就緒度、學習曲線和前景指數(shù)四個維度綜合評分,這些框架適用于不同從數(shù)據(jù)分析師到企業(yè)AI應用工程師的各種角色
    2026-04-04
  • pytorch自動求梯度autograd的實現(xiàn)

    pytorch自動求梯度autograd的實現(xiàn)

    autograd是一個自動微分引擎,它可以自動計算張量的梯度,本文主要介紹了pytorch自動求梯度autograd的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • PyQt6/PySide6中QTreeView類的實現(xiàn)

    PyQt6/PySide6中QTreeView類的實現(xiàn)

    QTreeView是PyQt6或PySide6庫中用于顯示分層數(shù)據(jù)的控件,本文主要介紹了PyQt6/PySide6中QTreeView類的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04

最新評論

龙江县| 桑日县| 南丰县| 溧阳市| 汤阴县| 富民县| 大化| 冀州市| 固原市| 河间市| 新密市| 平凉市| 肃北| 铜梁县| 璧山县| 新密市| 嘉祥县| 鄂伦春自治旗| 高雄县| 合水县| 白河县| 贺州市| 汝州市| 从江县| 岳阳县| 大竹县| 富裕县| 化州市| 克什克腾旗| 泰和县| 恩施市| 临邑县| 慈溪市| 鹤峰县| 东源县| 石门县| 清流县| 通渭县| 昌都县| 桂平市| 江城|