Установка PyQt5 в Linux
Чтобы установить PyQt5 в последней версии Ubuntu, выполните следующую команду:
$ sudo apt установить python3-pyqt5Если вы используете какой-либо другой дистрибутив Linux, найдите термин «Pyqt5» в диспетчере пакетов и установите его оттуда. Кроме того, вы можете установить PyQt5 из диспетчера пакетов pip, используя следующую команду:
$ pip установить pyqt5Обратите внимание, что в некоторых дистрибутивах вам может потребоваться использовать команду pip3 для правильной установки PyQt5.
Полный код
Я заранее публикую полный код, чтобы вы могли лучше понять контекст отдельных фрагментов кода, описанных далее в статье. Если вы знакомы с Python и PyQt5, вы можете просто обратиться к приведенному ниже коду и пропустить объяснение.
#!/ usr / bin / env python3import sys
из PyQt5.QtWidgets импортируют QWidget, QApplication, QVBoxLayout, QHBoxLayout
из PyQt5.QtWidgets импортируют QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
из PyQt5.QtGui импорт QKeySequence
из PyQt5 импорт Qt
Окно класса (QWidget):
def __init __ (сам):
супер().__в этом__()
себя.file_path = Нет
себя.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), самостоятельно)
себя.open_new_file_shortcut.активирован.подключиться (самостоятельно.open_new_file)
себя.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), самостоятельно)
себя.save_current_file_shortcut.активирован.подключиться (самостоятельно.save_current_file)
vbox = QVBoxLayout ()
text = "Файл без названия"
себя.title = QLabel (текст)
себя.заглавие.setWordWrap (Истина)
себя.заглавие.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.заглавие)
себя.setLayout (vbox)
себя.scrollable_text_area = QTextEdit ()
vbox.addWidget (self.scrollable_text_area)
def open_new_file (сам):
себя.file_path, filter_type = QFileDialog.getOpenFileName (self, «Открыть новый файл»,
"", "Все файлы (*)")
если я.Путь файла:
с открытым.file_path, "r") как f:
file_contents = f.читать()
себя.заглавие.setText (self.Путь файла)
себя.scrollable_text_area.setText (содержимое_файла)
еще:
себя.invalid_path_alert_message ()
def save_current_file (сам):
если не я.Путь файла:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Сохранить этот файл
как… "," "," Все файлы (*) ")
если новый_файл_путь:
себя.file_path = новый_file_path
еще:
себя.invalid_path_alert_message ()
вернуть ложь
file_contents = себя.scrollable_text_area.toPlainText ()
с открытым.file_path, "w") как f:
ж.написать (file_contents)
себя.заглавие.setText (self.Путь файла)
def closeEvent (себя, событие):
messageBox = QMessageBox ()
title = "Выйти из приложения?"
message = "ВНИМАНИЕ! !!\ n \ nЕсли выйти без сохранения, любые изменения, внесенные в файл
будет потеряно.\ n \ nСохранить файл перед выходом?"
reply = messageBox.вопрос (я, заголовок, сообщение, messageBox.Да | окно сообщения.Нет |
окно сообщения.Отмена, messageBox.Отмена)
если ответ == messageBox.Да:
return_value = self.save_current_file ()
если return_value == False:
мероприятие.игнорировать ()
elif reply == messageBox.Нет:
мероприятие.принимать()
еще:
мероприятие.игнорировать ()
def invalid_path_alert_message (сам):
messageBox = QMessageBox ()
окно сообщения.setWindowTitle ("Неверный файл")
окно сообщения.setText ("Выбранное имя файла или путь недействительны. Пожалуйста, выберите
действительный файл.")
окно сообщения.exec ()
если __name__ == '__main__':
app = QApplication (sys.argv)
w = Окно ()
ш.showMaximized ()
sys.выход (приложение.exec_ ())
Объяснение
Первая часть кода просто импортирует модули, которые будут использоваться во всем примере:
import sysиз PyQt5.QtWidgets импортируют QWidget, QApplication, QVBoxLayout, QHBoxLayout
из PyQt5.QtWidgets импортируют QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
из PyQt5.QtGui импорт QKeySequence
из PyQt5 импорт Qt
В следующей части создается новый класс под названием «Window», который наследуется от класса «QWidget». Класс QWidget предоставляет часто используемые графические компоненты в Qt. Используя «super», вы можете гарантировать, что родительский объект Qt будет возвращен.
Окно класса (QWidget):def __init __ (сам):
супер().__в этом__()
Некоторые переменные определены в следующей части. По умолчанию для пути к файлу установлено значение «Нет», а ярлыки для открытия файла с помощью
себя.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), самостоятельно)
себя.open_new_file_shortcut.активирован.подключиться (самостоятельно.open_new_file)
себя.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), самостоятельно)
себя.save_current_file_shortcut.активирован.подключиться (самостоятельно.save_current_file)
Используя класс QVBoxLayout, создается новый макет, в который будут добавлены дочерние виджеты. Выровненная по центру метка устанавливается для имени файла по умолчанию с использованием класса QLabel.
vbox = QVBoxLayout ()text = "Файл без названия"
себя.title = QLabel (текст)
себя.заглавие.setWordWrap (Истина)
себя.заглавие.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.заглавие)
себя.setLayout (vbox)
Затем в макет добавляется текстовая область с помощью объекта QTextEdit. Виджет QTextEdit предоставит вам редактируемую прокручиваемую область для работы с. Этот виджет поддерживает типичное копирование, вставку, вырезание, отмену, повтор, выбор всего и т. Д. горячие клавиши. Вы также можете использовать контекстное меню правой кнопки мыши в текстовой области.
себя.scrollable_text_area = QTextEdit ()vbox.addWidget (self.scrollable_text_area)
Метод open_new_fie вызывается, когда пользователь завершает
себя.file_path, filter_type = QFileDialog.getOpenFileName (self, «Открыть новый файл», «»,
"Все файлы (*)")
если я.Путь файла:
с открытым.file_path, "r") как f:
file_contents = f.читать()
себя.заглавие.setText (self.Путь файла)
себя.scrollable_text_area.setText (содержимое_файла)
еще:
себя.invalid_path_alert_message ()
Метод save_current_file вызывается всякий раз, когда пользователь завершает
если не я.Путь файла:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Сохранить этот файл
как… "," "," Все файлы (*) ")
если новый_файл_путь:
себя.file_path = новый_file_path
еще:
себя.invalid_path_alert_message ()
вернуть ложь
file_contents = себя.scrollable_text_area.toPlainText ()
с открытым.file_path, "w") как f:
ж.написать (file_contents)
себя.заглавие.setText (self.Путь файла)
Метод closeEvent является частью API обработки событий PyQt5. Этот метод вызывается всякий раз, когда пользователь пытается закрыть окно с помощью кнопки с крестиком или нажатием
messageBox = QMessageBox ()
title = "Выйти из приложения?"
message = "ВНИМАНИЕ! !!\ n \ nЕсли вы выйдете без сохранения, любые изменения, внесенные в файл, будут
Потерянный.\ n \ nСохранить файл перед выходом?"
reply = messageBox.вопрос (я, заголовок, сообщение, messageBox.Да | окно сообщения.Нет |
окно сообщения.Отмена, messageBox.Отмена)
если ответ == messageBox.Да:
return_value = self.save_current_file ()
если return_value == False:
мероприятие.игнорировать ()
elif reply == messageBox.Нет:
мероприятие.принимать()
еще:
мероприятие.игнорировать ()
В окне предупреждения «недопустимый файл» нет никаких наворотов. Он просто передает сообщение о том, что путь к файлу не может быть определен.
def invalid_path_alert_message (сам):messageBox = QMessageBox ()
окно сообщения.setWindowTitle ("Неверный файл")
окно сообщения.setText ("Выбранное имя файла или путь недействительны. Пожалуйста, выберите действительный файл.")
окно сообщения.exec ()
Наконец, основной цикл приложения для обработки событий и рисования виджетов запускается с помощью символа «.exec_ () »метод.
если __name__ == '__main__':app = QApplication (sys.argv)
w = Окно ()
ш.showMaximized ()
sys.выход (приложение.exec_ ())
Запуск приложения
Просто сохраните полный код в текстовый файл, установите расширение файла на «.py », отметьте исполняемый файл и запустите его, чтобы запустить приложение. Например, если имя файла - «simple_text_editor.py », вам необходимо выполнить следующие две команды:
$ chmod + x simple_text_editor.ру$ ./ simple_text_editor.ру
Что вы можете сделать, чтобы улучшить код
Приведенный выше код отлично подходит для простого текстового редактора. Однако он может быть бесполезен для практических целей, поскольку в нем отсутствуют многие функции, которые обычно встречаются в хороших текстовых редакторах. Вы можете улучшить код, добавив новые функции, такие как номера строк, выделение строк, выделение синтаксиса, несколько вкладок, сохранение сеанса, панель инструментов, раскрывающиеся меню, обнаружение изменения буфера и т. Д.
Заключение
В этой статье основное внимание уделяется обеспечению отправной точки для создания приложений PyQt. Если вы обнаружили ошибки в коде или хотите что-то подсказать, обратная связь приветствуется.