Загрузка данных
from PyQt6.QtWidgets import *
import sys
from NotePad import *
from PyQt6.QtPrintSupport import *
from PyQt6.QtGui import *
from PyQt6.QtCore import Qt
class NotePadWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show()
self.actionSave.triggered.connect(self.save_file)
self.actionNew.triggered.connect(self.file_new)
self.actionCopes.triggered.connect(self.open_file)
self.actionPrint.triggered.connect(self.priview_dialog)
self.actionPrint_2.triggered.connect(self.print_file)
self.actionUndo.triggered.connect(self.textEdit.undo)
self.actionRedo.triggered.connect(self.textEdit.redo)
self.actionExport_PDF.triggered.connect(self.export_pdf)
self.actionQuite.triggered.connect(self.close)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 12:
# Подключаем команды меню Edit к встроенным функциям QTextEdit.
# При нажатии Cut выделенный текст вырезается, Copy — копируется,
# Paste — вставляется из буфера обмена.
self.actionCut.triggered.connect(self.textEdit.cut)
self.actionCopy.triggered.connect(self.textEdit.copy)
self.actionPaste.triggered.connect(self.textEdit.paste)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 13:
# Подключаем команды форматирования к отдельным методам ниже.
self.actionBold.triggered.connect(self.text_bold)
self.actionItalic.triggered.connect(self.text_italic)
self.actionUnderline.triggered.connect(self.text_underline)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Подключаем пункты Left, Right и Center к функциям выравнивания.
# При нажатии на пункт абзац в textEdit выравнивается указанным способом.
self.actionLeft.triggered.connect(self.align_left)
self.actionRight.triggered.connect(self.align_right)
self.actionCenter.triggered.connect(self.align_center)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Подключаем пункт justifi к функции justify(), как в уроке.
self.actionjustifi.triggered.connect(self.justify)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 15:
# Подключаем пункт Font к диалогу выбора шрифта.
# При нажатии на Font будет вызвана функция font_dialog().
self.actionFont.triggered.connect(self.font_dialog)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 15:
# Подключаем пункт Color к диалогу выбора цвета текста.
# При нажатии на Color будет вызвана функция color_dialog().
self.actionColor.triggered.connect(self.color_dialog)
def closeEvent(self, event):
if self.mayby_save():
event.accept()
else:
event.ignore()
def mayby_save(self):
if not self.textEdit.document().isModified():
return True
ret = QMessageBox.warning(
self,
'Application',
'The document has been modified. Do you want to save it?',
QMessageBox.StandardButton.Save
| QMessageBox.StandardButton.Discard
| QMessageBox.StandardButton.Cancel,
)
if ret == QMessageBox.StandardButton.Save:
return self.save_file()
if ret == QMessageBox.StandardButton.Cancel:
return False
return True
def save_file(self):
filename, _ = QFileDialog.getSaveFileName(
self, 'Save File', '', 'Text Files (*.txt);;All Files (*)'
)
if filename:
with open(filename, 'w', encoding='utf-8') as f:
text = self.textEdit.toPlainText()
f.write(text)
QMessageBox.about(self, 'File Saved', 'File Saved')
self.textEdit.document().setModified(False)
return True
return False
def file_new(self):
if self.mayby_save():
self.textEdit.clear()
self.textEdit.document().setModified(False)
def open_file(self):
fname, _ = QFileDialog.getOpenFileName(
self, 'Open File', '', 'Text Files (*.txt);;All Files (*)'
)
if fname:
with open(fname, 'r', encoding='utf-8') as f:
data = f.read()
self.textEdit.setText(data)
self.textEdit.document().setModified(False)
def print_file(self):
printer = QPrinter(QPrinter.PrinterMode.HighResolution)
dialog = QPrintDialog(printer, self)
if dialog.exec() == QPrintDialog.DialogCode.Accepted:
getattr(self.textEdit, "print")(printer)
def priview_dialog(self):
printer = QPrinter(QPrinter.PrinterMode.HighResolution)
preview_dialog = QPrintPreviewDialog(printer, self)
preview_dialog.paintRequested.connect(self.print_preview)
preview_dialog.exec()
def print_preview(self, printer):
getattr(self.textEdit, "print")(printer)
def export_pdf(self):
filename, _ = QFileDialog.getSaveFileName(
self, 'Export PDF', '', 'PDF Files (*.pdf)'
)
if filename:
writer = QPdfWriter(filename)
writer.setPageSize(QPdfWriter.PageSize.A4)
getattr(self.textEdit, "print")(writer)
QMessageBox.about(self, 'Success', 'File exported to PDF successfully')
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 13:
# Создаём формат с жирным начертанием и применяем его к текущему выделению.
def text_bold(self):
font = QFont()
font.setBold(True)
self.textEdit.setCurrentFont(font)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 13:
# Создаём формат курсивного начертания и применяем его к текущему выделению.
def text_italic(self):
font = QFont()
font.setItalic(True)
self.textEdit.setCurrentFont(font)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 13:
# Включаем подчёркивание для текущего выделения или текста, который будут вводить.
def text_underline(self):
font = QFont()
font.setUnderline(True)
self.textEdit.setCurrentFont(font)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Устанавливаем выравнивание текста по левому краю.
# Qt.AlignmentFlag.AlignLeft — встроенный флаг Qt для левого выравнивания.
def align_left(self):
self.textEdit.setAlignment(Qt.AlignmentFlag.AlignLeft)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Устанавливаем выравнивание текста по правому краю.
# Qt.AlignmentFlag.AlignRight — встроенный флаг Qt для правого выравнивания.
def align_right(self):
self.textEdit.setAlignment(Qt.AlignmentFlag.AlignRight)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Размещаем текст по центру абзаца с помощью встроенного флага AlignCenter.
def align_center(self):
self.textEdit.setAlignment(Qt.AlignmentFlag.AlignCenter)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 14:
# Выравниваем текущий абзац по ширине, используя AlignJustify.
def justify(self):
self.textEdit.setAlignment(Qt.AlignmentFlag.AlignJustify)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 15:
# Открываем стандартное окно выбора шрифта.
# QFontDialog.getFont() возвращает выбранный шрифт и значение ok.
# Если пользователь подтвердил выбор (ok == True), применяем шрифт
# к выделенному тексту или к тексту, который будет вводиться дальше.
def font_dialog(self):
font, ok = QFontDialog.getFont()
if ok:
self.textEdit.setCurrentFont(font)
# ДОБАВЛЕНО ПО ВИДЕОУРОКУ 15:
# Открываем стандартное окно выбора цвета.
# Если выбранный цвет действителен, применяем его к тексту в textEdit.
# Если пользователь отменил выбор, цвет не меняется.
def color_dialog(self):
color = QColorDialog.getColor()
if color.isValid():
self.textEdit.setTextColor(color)
app = QApplication(sys.argv)
Note = NotePadWindow()
sys.exit(app.exec())