PyQt5: Текстовый редактор на Python (Урок 6)

Импорт модулей и создание основного класса

Импортируем необходимые классы из PyQt5 и стандартной библиотеки sys. Создадим класс Window, наследующий QMainWindow.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTextEdit

В конструкторе класса Window настраиваем основное окно: устанавливаем заголовок, размеры и позицию. Добавляем QTextEdit как центральный виджет.

class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('Редактор текста')
        self.setGeometry(300, 250, 350, 200)

        self.text_edit = QTextEdit(self)
        self.setCentralWidget(self.text_edit)

Основной метод и запуск приложения

Основной метод main создает объекты QApplication и Window, отображает окно и корректно завершает программу.

def main():
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

Добавление меню и пунктов меню

Импортируем QMenuBar и QMenu. Создаем меню «Файл» с пунктами «Открыть» и «Сохранить». Обработку сигналов выполняет метод action_clicked.

from PyQt5.QtWidgets import QMenuBar, QMenu
from PyQt5.QtCore import pyqtSlot, QCoreApplication
from PyQt5.QtWidgets import QFileDialog

class Window(QMainWindow):
    # ... (предыдущий код) ...

    def create_menu_bar(self):
        menu_bar = QMenuBar(self)
        self.setMenuBar(menu_bar)

        file_menu = QMenu('&Файл', self)
        menu_bar.addMenu(file_menu)

        open_action = file_menu.addAction('&Открыть')
        open_action.triggered.connect(self.action_clicked)
        save_action = file_menu.addAction('&Сохранить')
        save_action.triggered.connect(self.action_clicked)

    @pyqtSlot()
    def action_clicked(self):
        sender = self.sender()
        if sender.text() == 'Открыть':
            self.open_file()
        elif sender.text() == 'Сохранить':
            self.save_file()

    def open_file(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file')[0]
        try:
            with open(fname, 'r') as f:
                data = f.read()
                self.text_edit.setText(data)
        except FileNotFoundError:
            print("Файл не найден")

    def save_file(self):
        fname = QFileDialog.getSaveFileName(self, 'Save file')[0]
        try:
            with open(fname, 'w') as f:
                text = self.text_edit.toPlainText()
                f.write(text)
        except FileNotFoundError:
            print("Файл не найден")

Создан простой текстовый редактор с функциями открытия и сохранения файлов, используя PyQt. Дальнейшее развитие может включать расширение функциональности и улучшение интерфейса.

Что будем искать? Например,программа