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

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

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

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

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

正確邏輯:程序運(yùn)行流程圖

代碼詳解(逐行解釋)

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

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

# 2?? 創(chuàng)建主窗口(你的「畫布」)
window = QMainWindow()  # 100% 會(huì)用到的窗口類型
window.setWindowTitle("我的迷你記事本")  # 設(shè)置標(biāo)題(為什么叫"窗口"?因?yàn)樗撬蠻I的容器?。?
window.resize(500, 400)  # 設(shè)置大?。▽?00px, 高400px)

# 3?? 顯示窗口(關(guān)鍵?。?
window.show()  # ? 為什么必須寫?因?yàn)榇翱谀J(rèn)是「隱形」的!
# ? 如果不寫這行,程序會(huì)直接結(jié)束,你永遠(yuǎn)看不到窗口!

# 4?? 進(jìn)入事件循環(huán)(讓程序「活」起來(lái))
sys.exit(app.exec())  # ? 為什么叫「事件循環(huán)」?因?yàn)槌绦驎?huì)一直監(jiān)聽用戶操作(點(diǎn)擊、輸入等)

思考題:

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

答案:程序會(huì)立刻結(jié)束!你只能看到一閃而過(guò)的窗口(就像打開一個(gè)網(wǎng)頁(yè)立刻關(guān)閉)。

第二步:為什么需要QTextEdit?(小白必看!)

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

正確選擇:QTextEdit= 專為多行文本設(shè)計(jì)的編輯器

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

from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit  # 新增導(dǎo)入

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

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

# ? 為什么叫「中央」?因?yàn)榇翱诳梢杂许敳坎藛巍⒌撞繝顟B(tài)欄,編輯器占中間大塊

思考題:

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

答案:報(bào)錯(cuò)!setCentralWidget 是 QMainWindow 的專屬方法(PyQt 設(shè)計(jì)的規(guī)范)。

第三步:菜單欄怎么設(shè)計(jì)?(不是復(fù)制粘貼?。?/h2>

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

正確邏輯:菜單 = 1個(gè)主菜單 + 多個(gè)子菜單項(xiàng)

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

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

# 2?? 添加「文件」主菜單(為什么叫「主菜單」?因?yàn)樗谧钭筮叄?
file_menu = menubar.addMenu("文件")  # 創(chuàng)建菜單項(xiàng)

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

# 4?? 設(shè)置快捷鍵(為什么需要?因?yàn)橛脩袅?xí)慣Ctrl+S?。?
save_action.setShortcut("Ctrl+S")  # 40% 用戶會(huì)用快捷鍵

思考題:

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

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

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

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

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

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

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

思考題:

如果用戶打開一個(gè) .jpg 文件會(huì)怎樣?

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

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

常見錯(cuò)誤:用self.editor.text()→ 會(huì)包含HTML標(biāo)簽!

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

代碼詳解(關(guān)鍵在textChanged信號(hào)):

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

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

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

思考題:

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

答案split('\n') 會(huì)把 \r\n 當(dāng)成兩個(gè)字符,導(dǎo)致行數(shù)多1。正確做法:用 text.splitlines()(PyQt內(nèi)置方法,自動(dòng)處理?yè)Q行符)。

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

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

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

為什么這樣寫?

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

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

思考題:

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

答案:窗口會(huì)報(bào)錯(cuò)!因?yàn)?QMainWindow 的初始化邏輯沒(méi)執(zhí)行(PyQt要求必須調(diào)用父類構(gòu)造函數(shù))。

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

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. 設(shè)置窗口基礎(chǔ)屬性
        self.setWindowTitle("SimplePad - 我的第一個(gè)記事本")
        self.resize(800, 600)  # 更大的窗口(方便看字?jǐn)?shù))

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

        # ?? 3. 創(chuàng)建菜單欄(分步驟構(gòu)建)
        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("字體設(shè)置").triggered.connect(self.change_font)

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

    # ?? 5. 打開文件(帶錯(cuò)誤處理)
    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. 字體設(shè)置(用標(biāo)準(zhǔn)對(duì)話框)
    def change_font(self):
        font, ok = QFontDialog.getFont()
        if ok:
            self.editor.setFont(font)

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

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

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

相關(guān)文章

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

    Python pyecharts模塊安裝與入門教程

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

    Python 運(yùn)行 shell 獲取輸出結(jié)果的實(shí)例

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

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

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

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

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

    Python對(duì)象的底層實(shí)現(xiàn)源碼學(xué)習(xí)

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

    Java文件與類動(dòng)手動(dòng)腦實(shí)例詳解

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

    Python3.5 win10環(huán)境下導(dǎo)入kera/tensorflow報(bào)錯(cuò)的解決方法

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

    2026年最值得投入學(xué)習(xí)的PythonAI框架top10排行榜

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

    pytorch自動(dòng)求梯度autograd的實(shí)現(xiàn)

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

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

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

最新評(píng)論

石嘴山市| 仁布县| 宜黄县| 会昌县| 焉耆| 天峻县| 吴江市| 鄂托克旗| 安达市| 赤城县| 台南县| 峨边| 垣曲县| 堆龙德庆县| 理塘县| 岳池县| 惠来县| 庆城县| 辽中县| 平武县| 津南区| 柘荣县| 浦北县| 河津市| 松原市| 镇雄县| 信丰县| 嘉荫县| 兴隆县| 晋城| 龙口市| 隆子县| 清徐县| 石河子市| 镇江市| 大邑县| 昌吉市| 神池县| 仁布县| 政和县| 安泽县|