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

Python+PyQt手搓一個(gè)簡(jiǎn)單的記事本

 更新時(shí)間:2025年02月14日 10:32:15   作者:蹦蹦跳跳真可愛589  
這篇文章主要為大家詳細(xì)介紹了Python如何結(jié)合PyQt手搓一個(gè)簡(jiǎn)單的記事本,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、效果展示

二、設(shè)計(jì)PyQt界面

2.1、設(shè)置圖標(biāo)

self.setWindowIcon(QIcon('./images/icon/1.png'))  # 窗口圖標(biāo)

2.2、設(shè)置標(biāo)題

self.file_name = '無(wú)標(biāo)題-新建文本文檔'  # 默認(rèn)文件名
self.setWindowTitle(self.file_name)  # 窗口標(biāo)題

2.3、添加菜單欄、工具欄、狀態(tài)欄

# 創(chuàng)建菜單欄
self.menu_bar = QMenuBar(self)
self.setMenuBar(self.menu_bar)
# 創(chuàng)建工具欄
self.tool_bar = QToolBar(self)
self.addToolBar(self.tool_bar)
self.tool_bar.addAction(self.new_action)  # 添加新建操作到工具欄
self.tool_bar.addAction(self.newS_action)  # 添加保存操作到工具欄
 
# 創(chuàng)建字體和顏色按鈕
self.font_btn = QToolButton(self)  # 字體按鈕
self.font_btn.setIcon(QIcon('./images/icon/font.png'))  # 設(shè)置圖標(biāo)
self.tool_bar.addWidget(self.font_btn)
 
self.color_btn = QToolButton(self)  # 顏色按鈕
self.color_btn.setIcon(QIcon('./images/icon/color.png'))  # 設(shè)置圖標(biāo)
self.tool_bar.addWidget(self.color_btn)
 
# 創(chuàng)建文本編輯區(qū)
self.text_edit = QTextEdit(self)
self.setCentralWidget(self.text_edit)

2.4、菜單欄中添加菜單

# 創(chuàng)建文件菜單
self.file_menu = QMenu('文件(F)', self)
self.menu_bar.addMenu(self.file_menu)
 
# 創(chuàng)建編輯菜單
self.edit_menu = QMenu('編輯(E)', self)
self.menu_bar.addMenu(self.edit_menu)

2.5、菜單欄中的菜單添加動(dòng)作(選項(xiàng))

# 為文件菜單創(chuàng)建操作
self.new_action = QAction('新建(N)', self)  # 新建操作
self.new_action.setIcon(QIcon('./images/icon/new.png'))  # 設(shè)置圖標(biāo)
self.new_action.setShortcut(QKeySequence.New)  # 設(shè)置快捷鍵
self.file_menu.addAction(self.new_action)  # 添加到文件菜單
 
self.newO_action = QAction('打開(O)', self)  # 打開操作
self.newO_action.setIcon(QIcon('./images/icon/open.png'))  # 設(shè)置圖標(biāo)
self.newO_action.setShortcut(QKeySequence.Open)  # 設(shè)置快捷鍵
self.file_menu.addAction(self.newO_action)
 
self.newS_action = QAction('保存(S)', self)  # 保存操作
self.newS_action.setIcon(QIcon('./images/icon/save.png'))  # 設(shè)置圖標(biāo)
self.newS_action.setShortcut(QKeySequence.Save)  # 設(shè)置快捷鍵
self.file_menu.addAction(self.newS_action)
 
self.newA_action = QAction('另保存為(A)', self)  # 另存為操作
self.newA_action.setIcon(QIcon('./images/icon/save.png'))  # 設(shè)置圖標(biāo)
self.newA_action.setShortcut(QKeySequence.SaveAs)  # 設(shè)置快捷鍵
self.file_menu.addAction(self.newA_action)
 
# 為編輯菜單創(chuàng)建操作
self.newC_action = QAction('復(fù)制(C)', self)  # 復(fù)制操作
self.newC_action.setIcon(QIcon('./images/icon/copy.png'))  # 設(shè)置圖標(biāo)
self.newC_action.setShortcut(QKeySequence.Copy)  # 設(shè)置快捷鍵
self.edit_menu.addAction(self.newC_action)
 
self.newP_action = QAction('粘貼(P)', self)  # 粘貼操作
self.newP_action.setIcon(QIcon('./images/icon/paste.png'))  # 設(shè)置圖標(biāo)
self.newP_action.setShortcut(QKeySequence.Paste)  # 設(shè)置快捷鍵
self.edit_menu.addAction(self.newP_action)
 
self.newT_action = QAction('剪輯(T)', self)  # 剪切操作
self.newT_action.setIcon(QIcon('./images/icon/textitalic.png'))  # 設(shè)置圖標(biāo)
self.newT_action.setShortcut(QKeySequence.Cut)  # 設(shè)置快捷鍵
self.edit_menu.addAction(self.newT_action)
 
self.newU_action = QAction('撤銷(U)', self)  # 撤銷操作
self.newU_action.setIcon(QIcon('./images/icon/undo.png'))  # 設(shè)置圖標(biāo)
self.newU_action.setShortcut(QKeySequence.Undo)  # 設(shè)置快捷鍵
self.edit_menu.addAction(self.newU_action)
 
self.newR_action = QAction('反撤銷(R)', self)  # 反撤銷操作
self.newR_action.setIcon(QIcon('./images/icon/dir.png'))  # 設(shè)置圖標(biāo)
self.newR_action.setShortcut(QKeySequence.Redo)  # 設(shè)置快捷鍵
self.edit_menu.addAction(self.newR_action)

2.6、添加文本編輯區(qū)域

# 創(chuàng)建文本編輯區(qū)使其設(shè)置中心窗口
self.text_edit = QTextEdit(self)
self.setCentralWidget(self.text_edit)

三、菜單欄業(yè)務(wù)實(shí)現(xiàn)

3.1、連接操作與其相應(yīng)的槽函數(shù)

self.new_action.triggered.connect(self.new_action_slot)  # 新建文件
self.newO_action.triggered.connect(self.open_action)  # 打開文件
self.newS_action.triggered.connect(self.save_action_slot)  # 保存文件
self.newA_action.triggered.connect(self.saveAs_action_slot)  # 另存為文件

3.2、連接編輯操作

self.newC_action.triggered.connect(self.text_edit.copy)  # 復(fù)制
self.newP_action.triggered.connect(self.text_edit.paste)  # 粘貼
self.newT_action.triggered.connect(self.text_edit.cut)  # 剪切
self.newU_action.triggered.connect(self.text_edit.undo)  # 撤銷
self.newR_action.triggered.connect(self.text_edit.redo)  # 反撤銷

3.3、新建文件

新建文件這個(gè)函數(shù)操作的主要邏輯為:

如果當(dāng)前打開的文件文本內(nèi)容有被修改:

彈出消息提示框,是否要對(duì)更改進(jìn)行保存

保存:

如果此時(shí)的文件名為 無(wú)標(biāo)題-記事本, 要進(jìn)行另存為

否則:

進(jìn)行保存 (打開原來(lái)的文件,把文本框中的內(nèi)容寫入該文件,文件關(guān)閉)

文本區(qū)域清空

窗口標(biāo)題變成了無(wú)標(biāo)題-記事本

不保存:

文本區(qū)域清空

窗口標(biāo)題變成了無(wú)標(biāo)題-記事本

取消:    

什么都不做

如果當(dāng)前打開的文件文本內(nèi)容沒有被修改:

文本區(qū)域清空

窗口標(biāo)題變成了無(wú)標(biāo)題-記事本

def new_action_slot(self):
    # 處理新文件操作
    rest = self.text_edit.document().isModified()  # 檢查文檔是否被修改
    if rest:
        btn_res = QMessageBox.question(self, '記事本', '是否保存?',
                                       QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
        if btn_res == QMessageBox.Yes:
            self.save_action_slot()  # 保存文件
            self.text_edit.clear()  # 清空文本編輯區(qū)
            self.file_name = '無(wú)標(biāo)題記事本'
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
        elif btn_res == QMessageBox.No:
            self.text_edit.clear()  # 清空文本編輯區(qū)
            self.file_name = '無(wú)標(biāo)題記事本'
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
    else:
        self.text_edit.clear()  # 清空文本編輯區(qū)
        self.file_name = '無(wú)標(biāo)題記事本'
        self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題

3.4、打開文件

如果當(dāng)前這個(gè)文本內(nèi)容沒有做任何修改:

  • 彈出一個(gè)文件選擇對(duì)話框,選擇一個(gè)文件并打開,讀這個(gè)文件的內(nèi)容,把讀到內(nèi)容設(shè) 置到文本編輯框中,文件本身關(guān)閉!
  • 窗口標(biāo)題變成了打開的這個(gè)文件的名字

如果當(dāng)前這個(gè)文本內(nèi)容有做修改:

彈出消息對(duì)話框,詢問(wèn)是否對(duì)修改進(jìn)行保存。

保存:  

如果此時(shí)窗口標(biāo)題為 無(wú)標(biāo)題-記事本

進(jìn)行另存為

否則:

保存

彈出一個(gè)文件選擇對(duì)話框,選擇一個(gè)文件并打開,讀這個(gè)文件的內(nèi)容,把讀到內(nèi) 容設(shè)置到文本編輯框中,文件本身關(guān)閉!

窗口標(biāo)題變成了打開的這個(gè)文件的名字

不保存:

彈出一個(gè)文件選擇對(duì)話框,選擇一個(gè)文件并打開,讀這個(gè)文件的內(nèi)容,把讀到內(nèi) 容設(shè)置到文本編輯框中,文件本身關(guān)閉!

窗口標(biāo)題變成了打開的這個(gè)文件的名字

 取消:

說(shuō)明是誤觸,什么都不做

def open_action(self):
    # 處理打開文件操作
    rest = self.text_edit.document().isModified()
    if rest:
        btn_res = QMessageBox.question(self, '記事本', '是否保存?',
                                       QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
        if btn_res == QMessageBox.Yes:
            self.save_action_slot()  # 保存文件
            self.open_file()  # 打開文件
        elif btn_res == QMessageBox.No:
            self.open_file()  # 打開文件
    else:
        self.open_file()  # 直接打開文件
def open_file(self):
    # 打開文件對(duì)話框,選擇文件進(jìn)行打開
    self.file_path = QFileDialog.getOpenFileName(self, '打開', './', '記事本TXT(*.txt)')[0]
    print(self.file_path)
 
    fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象
    fs.open(QFile.ReadOnly)  # 以只讀方式打開文件
    if fs.isOpen():
        data = fs.readAll()  # 讀取文件內(nèi)容
        print(data)
        self.text_edit.setText(bytearray(data).decode('utf-8'))  # 將內(nèi)容設(shè)置到文本編輯區(qū)
        self.file_name = QFileInfo(self.file_path).fileName()  # 獲取文件名
        self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
        fs.close()  # 關(guān)閉文件
    else:
        print('文件未打開')  # 打開失敗的提示

3.5、保存文件

如果當(dāng)前操作的文件 文件名為 無(wú)標(biāo)題-記事本

進(jìn)行另存為

否則:

  • 打開當(dāng)前的這個(gè)文件,獲取文本框中的內(nèi)容,寫入到文件中,文件關(guān)閉!
  • 窗口標(biāo)題變成了當(dāng)前打開文件的文件字
  • 修改文本框中的文本狀態(tài)為 未修改
def save_action_slot(self):
    # 保存文件操作
    if self.file_name == '無(wú)標(biāo)題':
        self.saveAs_action_slot()  # 如果沒有文件名,則執(zhí)行另存為
    else:
        fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象
        fs.open(QFile.WriteOnly)  # 以寫入方式打開文件
        if fs.isOpen():
            text = self.text_edit.toPlainText()  # 獲取文本編輯區(qū)中的純文本
            fs.write(text.encode('utf-8'))  # 寫入文件
            self.file_name = QFileInfo(self.file_path).fileName()  # 更新文件名
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
            fs.close()  # 關(guān)閉文件
            self.text_edit.document().setModified(False)  # 重置文檔修改狀態(tài)
 
        else:
            print('文件打開失敗')  # 寫入失敗的提示

3.6、文件另存為

根據(jù)window中記事本的另存為動(dòng)作,

分析:

  • 彈出一個(gè)文件選擇對(duì)話框,輸入新保存的文件名字,保存
  • 打開文件,獲取文本框中的內(nèi)容, 寫入文件中, 文件關(guān)閉
  • 窗口標(biāo)題變成新保存文件的名字!
  • 修改文本框中的文本狀態(tài)為 未修改
def saveAs_action_slot(self):
    # 另存為文件操作
    self.file_path = QFileDialog.getSaveFileName(self, '另存為', './', '記事本TXT(*.txt)')[0]
    fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象
    fs.open(QFile.WriteOnly)  # 以寫入方式打開文件
    if fs.isOpen():
        text = self.text_edit.toPlainText()  # 獲取文本編輯區(qū)中的純文本
        fs.write(text.encode('utf-8'))  # 寫入文件
        self.file_name = QFileInfo(self.file_path).fileName()  # 更新文件名
        self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
        fs.close()  # 關(guān)閉文件
        self.text_edit.document().setModified(False)  # 重置文檔修改狀態(tài)
    else:
        print('文件另存為失敗')  # 另存為失敗的提示

3.7 、文本的復(fù)制、粘貼、剪切、撤銷、恢復(fù)

在QTextEdit中查找 都有對(duì)應(yīng)的槽函數(shù) copy()、paste()、cut()、undo()、redo() 

self.newC_action.triggered.connect(self.text_edit.copy)  # 復(fù)制
self.newP_action.triggered.connect(self.text_edit.paste)  # 粘貼
self.newT_action.triggered.connect(self.text_edit.cut)  # 剪切
self.newU_action.triggered.connect(self.text_edit.undo)  # 撤銷
self.newR_action.triggered.connect(self.text_edit.redo)  # 反撤銷

3.8、工具欄業(yè)務(wù)實(shí)現(xiàn) 

def font_slot(self):
    # 字體選擇操作
    font = QFontDialog.getFont(self)[0]  # 彈出字體選擇對(duì)話框
    print(font)
    self.text_edit.setCurrentFont(font)  # 設(shè)置文本編輯區(qū)的當(dāng)前字體
 
def color_slot(self):
    # 顏色選擇操作
    color = QColorDialog.getColor(QColor(), self)  # 彈出顏色選擇對(duì)話框
    self.text_edit.setTextColor(color)  # 設(shè)置文本編輯區(qū)的文本顏色

四、用到的庫(kù)函數(shù)

1.QMainWinodw      

  • setWindowTitle() 修改窗口標(biāo)題      
  • setWindowIcon() 設(shè)置窗口圖標(biāo)      
  • setMenuBar()        
  • addToolBar()        
  • setStatusBar() 設(shè)置菜單欄 添加工具欄 設(shè)置狀態(tài)欄      
  • setCentralWidget() 設(shè)置核心區(qū)域

2.QMenuBar 菜單欄      

addMenu()   添加菜單

3.QMenu      

  • setTitle() 設(shè)置標(biāo)題      
  • addAction() 添加動(dòng)作

4.QAction        

  • setText()        設(shè)置文本
  • setIcon()        設(shè)置圖標(biāo)
  • setShortCut()        設(shè)置快捷按鍵
  • triggered()     信號(hào)

5.QToolBar  工具欄      

  • addAction()          添加動(dòng)作
  • addWidget()     添加其他控件

6.QToolButton        工具按鈕

  • setIcon()        設(shè)置圖標(biāo)
  • clicked()        點(diǎn)擊信號(hào)

7.QStatusBar        狀態(tài)欄

8.QTextEdit

  • document()文本文檔的獲取
  • toPlainText()內(nèi)容的獲取
  • clear()內(nèi)容的清空
  • textChanged()文本修改的內(nèi)容
  • setText()設(shè)置內(nèi)容

9.QTextDocument

  • isModified()是否有被修改
  • setModified(bool)修改狀態(tài)

10.QMessageBox

question()詢問(wèn)

11.QFileDialog

  • getOpenFileName() 獲取選擇打開的文件完整路徑名      
  • getSaveFileName() 獲取另存為的文件的完整路徑名

12.QFile

  • open()          打開文件
  • isOpened()      是否打開成功
  • write()          寫數(shù)據(jù)
  • readAll()        讀數(shù)據(jù)
  • close()    關(guān)閉文件

13.QFileInfo      

fileName() 獲取文件名 

五、完整代碼

import sys  
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, \
    QMenu, QAction, QToolBar, QToolButton, QTextEdit, \
    QMessageBox, QFileDialog, QFontDialog, QColorDialog  
from PyQt5.QtGui import QIcon, QKeySequence, QColor  
from PyQt5.QtCore import QFile, QFileInfo  
 
 
class My_QMW(QMainWindow):  
    def __init__(self):  
        super().__init__()  
        self.file_name = '無(wú)標(biāo)題-新建文本文檔'  # 默認(rèn)文件名  
        self.file_path = ''  # 當(dāng)前文件路徑  
        self.ui_init()  # 初始化UI組件  
        self.solt_init()  # 初始化信號(hào)與槽的連接  
 
    def ui_init(self):  
        # 設(shè)置主窗口的基本屬性  
        self.setGeometry(700, 300, 1200, 800)  # 窗口位置和大小  
        self.setWindowTitle(self.file_name)  # 窗口標(biāo)題  
        self.setWindowIcon(QIcon('./images/icon/1.png'))  # 窗口圖標(biāo)  
 
        # 創(chuàng)建菜單欄  
        self.menu_bar = QMenuBar(self)  
        self.setMenuBar(self.menu_bar)  
 
        # 創(chuàng)建文件菜單  
        self.file_menu = QMenu('文件(F)', self)  
        self.menu_bar.addMenu(self.file_menu)  
 
        # 創(chuàng)建編輯菜單  
        self.edit_menu = QMenu('編輯(E)', self)  
        self.menu_bar.addMenu(self.edit_menu)  
 
        # 為文件菜單創(chuàng)建操作  
        self.new_action = QAction('新建(N)', self)  # 新建操作  
        self.new_action.setIcon(QIcon('./images/icon/new.png'))  # 設(shè)置圖標(biāo)  
        self.new_action.setShortcut(QKeySequence.New)  # 設(shè)置快捷鍵  
        self.file_menu.addAction(self.new_action)  # 添加到文件菜單  
 
        self.newO_action = QAction('打開(O)', self)  # 打開操作  
        self.newO_action.setIcon(QIcon('./images/icon/open.png'))  # 設(shè)置圖標(biāo)  
        self.newO_action.setShortcut(QKeySequence.Open)  # 設(shè)置快捷鍵  
        self.file_menu.addAction(self.newO_action)  
 
        self.newS_action = QAction('保存(S)', self)  # 保存操作  
        self.newS_action.setIcon(QIcon('./images/icon/save.png'))  # 設(shè)置圖標(biāo)  
        self.newS_action.setShortcut(QKeySequence.Save)  # 設(shè)置快捷鍵  
        self.file_menu.addAction(self.newS_action)  
 
        self.newA_action = QAction('另保存為(A)', self)  # 另存為操作  
        self.newA_action.setIcon(QIcon('./images/icon/save.png'))  # 設(shè)置圖標(biāo)  
        self.newA_action.setShortcut(QKeySequence.SaveAs)  # 設(shè)置快捷鍵  
        self.file_menu.addAction(self.newA_action)  
 
        # 為編輯菜單創(chuàng)建操作  
        self.newC_action = QAction('復(fù)制(C)', self)  # 復(fù)制操作  
        self.newC_action.setIcon(QIcon('./images/icon/copy.png'))  # 設(shè)置圖標(biāo)  
        self.newC_action.setShortcut(QKeySequence.Copy)  # 設(shè)置快捷鍵  
        self.edit_menu.addAction(self.newC_action)  
 
        self.newP_action = QAction('粘貼(P)', self)  # 粘貼操作  
        self.newP_action.setIcon(QIcon('./images/icon/paste.png'))  # 設(shè)置圖標(biāo)  
        self.newP_action.setShortcut(QKeySequence.Paste)  # 設(shè)置快捷鍵  
        self.edit_menu.addAction(self.newP_action)  
 
        self.newT_action = QAction('剪輯(T)', self)  # 剪切操作  
        self.newT_action.setIcon(QIcon('./images/icon/textitalic.png'))  # 設(shè)置圖標(biāo)  
        self.newT_action.setShortcut(QKeySequence.Cut)  # 設(shè)置快捷鍵  
        self.edit_menu.addAction(self.newT_action)  
 
        self.newU_action = QAction('撤銷(U)', self)  # 撤銷操作  
        self.newU_action.setIcon(QIcon('./images/icon/undo.png'))  # 設(shè)置圖標(biāo)  
        self.newU_action.setShortcut(QKeySequence.Undo)  # 設(shè)置快捷鍵  
        self.edit_menu.addAction(self.newU_action)  
 
        self.newR_action = QAction('反撤銷(R)', self)  # 反撤銷操作  
        self.newR_action.setIcon(QIcon('./images/icon/dir.png'))  # 設(shè)置圖標(biāo)  
        self.newR_action.setShortcut(QKeySequence.Redo)  # 設(shè)置快捷鍵  
        self.edit_menu.addAction(self.newR_action)  
 
        # 創(chuàng)建工具欄并添加操作  
        self.tool_bar = QToolBar(self)  
        self.addToolBar(self.tool_bar)  
        
        self.tool_bar.addAction(self.new_action)  # 添加新建操作到工具欄  
        self.tool_bar.addAction(self.newS_action)  # 添加保存操作到工具欄  
 
        # 創(chuàng)建字體和顏色按鈕  
        self.font_btn = QToolButton(self)  # 字體按鈕  
        self.font_btn.setIcon(QIcon('./images/icon/font.png'))  # 設(shè)置圖標(biāo)  
        self.tool_bar.addWidget(self.font_btn)  
 
        self.color_btn = QToolButton(self)  # 顏色按鈕  
        self.color_btn.setIcon(QIcon('./images/icon/color.png'))  # 設(shè)置圖標(biāo)  
        self.tool_bar.addWidget(self.color_btn)  
 
        # 創(chuàng)建文本編輯區(qū)  
        self.text_edit = QTextEdit(self)  
        self.setCentralWidget(self.text_edit)  
 
    def solt_init(self):  
        # 連接操作與其相應(yīng)的槽函數(shù)  
        self.new_action.triggered.connect(self.new_action_slot)  # 新建文件  
        self.newO_action.triggered.connect(self.open_action)  # 打開文件  
        self.newS_action.triggered.connect(self.save_action_slot)  # 保存文件  
        self.newA_action.triggered.connect(self.saveAs_action_slot)  # 另存為文件  
 
        # 連接編輯操作  
        self.newC_action.triggered.connect(self.text_edit.copy)  # 復(fù)制  
        self.newP_action.triggered.connect(self.text_edit.paste)  # 粘貼  
        self.newT_action.triggered.connect(self.text_edit.cut)  # 剪切  
        self.newU_action.triggered.connect(self.text_edit.undo)  # 撤銷  
        self.newR_action.triggered.connect(self.text_edit.redo)  # 反撤銷  
 
        self.font_btn.clicked.connect(self.font_slot)  # 字體按鈕點(diǎn)擊  
        self.color_btn.clicked.connect(self.color_slot)  # 顏色按鈕點(diǎn)擊  
 
        # 當(dāng)文本更改時(shí)更新窗口標(biāo)題  
        self.text_edit.textChanged.connect(self.update_title)  
 
    def new_action_slot(self):  
        # 處理新文件操作  
        rest = self.text_edit.document().isModified()  # 檢查文檔是否被修改  
        if rest:  
            btn_res = QMessageBox.question(self, '記事本', '是否保存?', QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)  
            if btn_res == QMessageBox.Yes:  
                self.save_action_slot()  # 保存文件  
                self.text_edit.clear()  # 清空文本編輯區(qū)  
                self.file_name = '無(wú)標(biāo)題記事本'  
                self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
            elif btn_res == QMessageBox.No:  
                self.text_edit.clear()  # 清空文本編輯區(qū)  
                self.file_name = '無(wú)標(biāo)題記事本'  
                self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
        else:  
            self.text_edit.clear()  # 清空文本編輯區(qū)  
            self.file_name = '無(wú)標(biāo)題記事本'  
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
 
    def open_action(self):  
        # 處理打開文件操作  
        rest = self.text_edit.document().isModified()  
        if rest:  
            btn_res = QMessageBox.question(self, '記事本', '是否保存?', QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)  
            if btn_res == QMessageBox.Yes:  
                self.save_action_slot()  # 保存文件  
                self.open_file()  # 打開文件  
            elif btn_res == QMessageBox.No:  
                self.open_file()  # 打開文件  
        else:  
            self.open_file()  # 直接打開文件  
 
    def open_file(self):  
        # 打開文件對(duì)話框,選擇文件進(jìn)行打開  
        self.file_path = QFileDialog.getOpenFileName(self, '打開', './', '記事本TXT(*.txt)')[0]  
        print(self.file_path)  
 
        fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象  
        fs.open(QFile.ReadOnly)  # 以只讀方式打開文件  
        if fs.isOpen():  
            data = fs.readAll()  # 讀取文件內(nèi)容  
            print(data)  
            self.text_edit.setText(bytearray(data).decode('utf-8'))  # 將內(nèi)容設(shè)置到文本編輯區(qū)  
            self.file_name = QFileInfo(self.file_path).fileName()  # 獲取文件名  
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
            fs.close()  # 關(guān)閉文件  
        else:  
            print('文件未打開')  # 打開失敗的提示  
 
    def save_action_slot(self):  
        # 保存文件操作  
        if self.file_name == '無(wú)標(biāo)題':  
            self.saveAs_action_slot()  # 如果沒有文件名,則執(zhí)行另存為  
        else:  
            fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象  
            fs.open(QFile.WriteOnly)  # 以寫入方式打開文件  
            if fs.isOpen():  
                text = self.text_edit.toPlainText()  # 獲取文本編輯區(qū)中的純文本  
                fs.write(text.encode('utf-8'))  # 寫入文件  
                self.file_name = QFileInfo(self.file_path).fileName()  # 更新文件名  
                self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
                fs.close()  # 關(guān)閉文件  
                self.text_edit.document().setModified(False)  # 重置文檔修改狀態(tài)  
 
            else:  
                print('文件打開失敗')  # 寫入失敗的提示  
 
    def saveAs_action_slot(self):  
        # 另存為文件操作  
        self.file_path = QFileDialog.getSaveFileName(self, '另存為', './', '記事本TXT(*.txt)')[0]  
        fs = QFile(self.file_path)  # 創(chuàng)建QFile對(duì)象  
        fs.open(QFile.WriteOnly)  # 以寫入方式打開文件  
        if fs.isOpen():  
            text = self.text_edit.toPlainText()  # 獲取文本編輯區(qū)中的純文本  
            fs.write(text.encode('utf-8'))  # 寫入文件  
            self.file_name = QFileInfo(self.file_path).fileName()  # 更新文件名  
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
            fs.close()  # 關(guān)閉文件  
            self.text_edit.document().setModified(False)  # 重置文檔修改狀態(tài)  
        else:  
            print('文件另存為失敗')  # 另存為失敗的提示  
 
    def font_slot(self):  
        # 字體選擇操作  
        font = QFontDialog.getFont(self)[0]  # 彈出字體選擇對(duì)話框  
        print(font)  
        self.text_edit.setCurrentFont(font)  # 設(shè)置文本編輯區(qū)的當(dāng)前字體  
 
    def color_slot(self):  
        # 顏色選擇操作  
        color = QColorDialog.getColor(QColor(), self)  # 彈出顏色選擇對(duì)話框  
        self.text_edit.setTextColor(color)  # 設(shè)置文本編輯區(qū)的文本顏色  
 
    def update_title(self):  
        # 文本更改時(shí)更新窗口標(biāo)題  
        self.setWindowTitle('*' + self.file_name)  # 在標(biāo)題前添加*表示文檔被修改過(guò)  
 
if __name__ == '__main__':  
    app = QApplication(sys.argv)  # 創(chuàng)建應(yīng)用程序  
    windows = My_QMW()  # 創(chuàng)建主窗口實(shí)例  
    windows.show()  # 顯示主窗口  
    sys.exit(app.exec_())  # 運(yùn)行主循環(huán)

以上就是Python+PyQt手搓一個(gè)簡(jiǎn)單的記事本的詳細(xì)內(nèi)容,更多關(guān)于Python PyQt記事本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼

    Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的無(wú)損放大圖片小程序,可以支持將JPG/PNG圖片無(wú)損放大上萬(wàn)像素,感興趣的可以了解一下
    2022-08-08
  • 中秋陰天看不見月亮只好用python寫賞月工具

    中秋陰天看不見月亮只好用python寫賞月工具

    女神約我去賞月!我一看中秋節(jié)可能會(huì)下雨,立馬用Python寫了款賞月工具!本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Pycharm配置遠(yuǎn)程SSH服務(wù)器實(shí)現(xiàn)(切換不同虛擬環(huán)境)

    Pycharm配置遠(yuǎn)程SSH服務(wù)器實(shí)現(xiàn)(切換不同虛擬環(huán)境)

    本文主要介紹了Pycharm配置遠(yuǎn)程SSH服務(wù)器實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python for 循環(huán)獲取index索引的方法

    python for 循環(huán)獲取index索引的方法

    今天小編就為大家分享一篇python for 循環(huán)獲取index索引的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python遠(yuǎn)控代碼的教程詳解

    python遠(yuǎn)控代碼的教程詳解

    大家遠(yuǎn)控還在用軟件嗎,其實(shí)幾行代碼輕松搞定,這篇文章小編就來(lái)和大家介紹一下如何使用Python實(shí)現(xiàn)遠(yuǎn)程控制代碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 余弦相似性計(jì)算及python代碼實(shí)現(xiàn)過(guò)程解析

    余弦相似性計(jì)算及python代碼實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了余弦相似性計(jì)算及python代碼實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python中reversed與reverse的區(qū)別解析

    python中reversed與reverse的區(qū)別解析

    reverse()是python中列表的一個(gè)內(nèi)置方法(在字典、字符串和元組中沒有這個(gè)內(nèi)置方法),用于列表中數(shù)據(jù)的反轉(zhuǎn),這篇文章主要介紹了python中reversed與reverse的區(qū)別,需要的朋友可以參考下
    2023-03-03
  • 一文詳解5個(gè)你可能不知道但非常有用的Python庫(kù)

    一文詳解5個(gè)你可能不知道但非常有用的Python庫(kù)

    Python作為當(dāng)今最流行的編程語(yǔ)言之一,其強(qiáng)大的生態(tài)系統(tǒng)是其成功的關(guān)鍵因素,在這個(gè)龐大的生態(tài)系統(tǒng)中,除了眾所周知的NumPy、Pandas、Requests等明星庫(kù)外,還隱藏著許多功能強(qiáng)大但鮮為人知的瑰寶,本文呢就為大家盤點(diǎn)了一些你可能不知道但非常有用的Python庫(kù)
    2025-11-11
  • python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子

    python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子

    這篇文章主要介紹了python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子,需要的朋友可以參考下
    2014-04-04
  • 2025年P(guān)ython 3.12.0 安裝使用全攻略

    2025年P(guān)ython 3.12.0 安裝使用全攻略

    本文主要介紹了2025年P(guān)ython3.12.0安裝使用全攻略,涵蓋自定義安裝、路徑設(shè)置及環(huán)境驗(yàn)證,確保順利配置Python環(huán)境,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-05-05

最新評(píng)論

宝清县| 南城县| 临沂市| 屏东市| 云梦县| 梓潼县| 乐都县| 太保市| 贵州省| 绵竹市| 鄱阳县| 准格尔旗| 梁山县| 江安县| 巩义市| 瓦房店市| 崇文区| 沐川县| 博爱县| 昌邑市| 浙江省| 于田县| 塔城市| 华阴市| 汉源县| 栾川县| 廊坊市| 昭苏县| 温州市| 曲麻莱县| 越西县| 鸡泽县| 庄浪县| 麻城市| 扎囊县| 泰州市| 青铜峡市| 东至县| 乐平市| 益阳市| 迁西县|