欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 = '無標(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í)的文件名為 無標(biāo)題-記事本, 要進(jìn)行另存為

否則:

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

文本區(qū)域清空

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

不保存:

文本區(qū)域清空

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

取消:    

什么都不做

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

文本區(qū)域清空

窗口標(biāo)題變成了無標(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 = '無標(biāo)題記事本'
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
        elif btn_res == QMessageBox.No:
            self.text_edit.clear()  # 清空文本編輯區(qū)
            self.file_name = '無標(biāo)題記事本'
            self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題
    else:
        self.text_edit.clear()  # 清空文本編輯區(qū)
        self.file_name = '無標(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ì)話框,詢問是否對(duì)修改進(jìn)行保存。

保存:  

如果此時(shí)窗口標(biāo)題為 無標(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è)文件的名字

 取消:

說明是誤觸,什么都不做

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)前操作的文件 文件名為 無標(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 == '無標(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ū)的文本顏色

四、用到的庫函數(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()詢問

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 = '無標(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 = '無標(biāo)題記事本'  
                self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
            elif btn_res == QMessageBox.No:  
                self.text_edit.clear()  # 清空文本編輯區(qū)  
                self.file_name = '無標(biāo)題記事本'  
                self.setWindowTitle(self.file_name)  # 更新窗口標(biāo)題  
        else:  
            self.text_edit.clear()  # 清空文本編輯區(qū)  
            self.file_name = '無標(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 == '無標(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)題前添加*表示文檔被修改過  
 
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)文章

  • scipy稀疏數(shù)組dok_array的具體使用

    scipy稀疏數(shù)組dok_array的具體使用

    本文主要介紹了scipy稀疏數(shù)組dok_array的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python基礎(chǔ)學(xué)習(xí)之組織文件

    python基礎(chǔ)學(xué)習(xí)之組織文件

    今天帶大家復(fù)習(xí)python基礎(chǔ)知識(shí),此文章將要介紹如何組織文件,既拷貝,移動(dòng)等,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • python實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    python實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • keras中的卷積層&池化層的用法

    keras中的卷積層&池化層的用法

    這篇文章主要介紹了keras中的卷積層&池化層的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python實(shí)現(xiàn)求解列表中元素的排列和組合問題

    python實(shí)現(xiàn)求解列表中元素的排列和組合問題

    本篇文章給大家分享使用python的內(nèi)置模塊實(shí)現(xiàn)求解列表中元素的排列和組合問題,具體實(shí)現(xiàn)代碼大家參考下本文
    2018-03-03
  • python?numpy庫之如何使用matpotlib庫繪圖

    python?numpy庫之如何使用matpotlib庫繪圖

    Numpy的主要對(duì)象是同構(gòu)多維數(shù)組,它是一個(gè)元素表,所有類型都相同,由非負(fù)整數(shù)元組索引,在Numpy維度中稱為軸,這篇文章主要介紹了python?numpy庫?使用matpotlib庫繪圖,需要的朋友可以參考下
    2022-10-10
  • Django中的forms組件實(shí)例詳解

    Django中的forms組件實(shí)例詳解

    這篇文章主要介紹了Django的forms組件,本文通過實(shí)例代碼介紹了Django的forms組件,需要的朋友可以參考下
    2018-11-11
  • 用python建立兩個(gè)Y軸的XY曲線圖方法

    用python建立兩個(gè)Y軸的XY曲線圖方法

    今天小編就為大家分享一篇用python建立兩個(gè)Y軸的XY曲線圖方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python 實(shí)現(xiàn)長(zhǎng)數(shù)據(jù)完整打印方案

    python 實(shí)現(xiàn)長(zhǎng)數(shù)據(jù)完整打印方案

    這篇文章主要介紹了python 實(shí)現(xiàn)長(zhǎng)數(shù)據(jù)完整打印方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 使用python來玩一次股票代碼詳解

    使用python來玩一次股票代碼詳解

    這篇文章主要介紹了使用python來玩一次股票代碼詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2023-01-01

最新評(píng)論