Python+PyQt手搓一個(gè)簡(jiǎn)單的記事本
一、效果展示
二、設(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)文章
python實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11python實(shí)現(xiàn)求解列表中元素的排列和組合問題
本篇文章給大家分享使用python的內(nèi)置模塊實(shí)現(xiàn)求解列表中元素的排列和組合問題,具體實(shí)現(xiàn)代碼大家參考下本文2018-03-03python?numpy庫之如何使用matpotlib庫繪圖
Numpy的主要對(duì)象是同構(gòu)多維數(shù)組,它是一個(gè)元素表,所有類型都相同,由非負(fù)整數(shù)元組索引,在Numpy維度中稱為軸,這篇文章主要介紹了python?numpy庫?使用matpotlib庫繪圖,需要的朋友可以參考下2022-10-10python 實(shí)現(xiàn)長(zhǎng)數(shù)據(jù)完整打印方案
這篇文章主要介紹了python 實(shí)現(xiàn)長(zhǎng)數(shù)據(jù)完整打印方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03