Встановлення PyQt5 в Linux
Щоб встановити PyQt5 в останній версії Ubuntu, виконайте команду нижче:
$ sudo apt встановити python3-pyqt5Якщо ви використовуєте будь-який інший дистрибутив Linux, знайдіть термін “Pyqt5” у диспетчері пакетів та встановіть його звідти. Крім того, ви можете встановити PyQt5 з менеджера пакунків pip, використовуючи команду нижче:
$ pip встановити pyqt5Зверніть увагу, що в деяких дистрибутивах вам, можливо, доведеться використовувати команду pip3, щоб правильно встановити PyQt5.
Повний код
Я публікую повний код заздалегідь, щоб ви могли краще зрозуміти контекст окремих фрагментів коду, пояснених далі в статті. Якщо ви знайомі з Python та PyQt5, ви можете просто звернутися до коду нижче та пропустити пояснення.
#!/ usr / bin / env python3імпортувати sys
від PyQt5.Імпорт QtWidgets QWidget, QApplication, QVBoxLayout, QHBoxLayout
від PyQt5.Імпорт QtWidgets QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
від PyQt5.Імпорт QtGui QKeySequence
з PyQt5 імпортувати Qt
Вікно класу (QWidget):
def __init __ (self):
супер ().__у цьому__()
себе.file_path = Немає
себе.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), self)
себе.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 (True)
себе.заголовок.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.назва)
себе.setLayout (vbox)
себе.scrollable_text_area = QTextEdit ()
vbox.addWidget (self.прокручуваний_текст_площа)
def open_new_file (self):
себе.file_path, filter_type = QFileDialog.getOpenFileName (self, "Відкрити новий файл",
"", "Усі файли (*)")
якщо сам.шлях_файлу:
з відкритою (самост.file_path, "r") як f:
file_contents = f.читати ()
себе.заголовок.setText (self.шлях_файлу)
себе.прокручуваний_текст_площа.setText (вміст_файлу)
ще:
себе.invalid_path_alert_message ()
def save_current_file (self):
якщо не я.шлях_файлу:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Зберегти цей файл
як… "," "," Усі файли (*) ")
якщо new_file_path:
себе.file_path = new_file_path
ще:
себе.invalid_path_alert_message ()
повернення False
file_contents = self.прокручуваний_текст_площа.toPlainText ()
з відкритою (самост.file_path, "w") як f:
f.запис (вміст_файлу)
себе.заголовок.setText (self.шлях_файлу)
def closeEvent (self, подія):
messageBox = QMessageBox ()
title = "Вийти із програми?"
message = "ПОПЕРЕДЖЕННЯ !!\ n \ nЯкщо ви вийдете без збереження, будь-які зміни, внесені у файл
буде загублено.\ n \ nЗбережіть файл перед виходом?"
відповідь = messageBox.питання (self, title, message, messageBox.Так | messageBox.Ні |
messageBox.Скасувати, messageBox.Скасувати)
якщо відповідь == messageBox.Так:
return_value = self.save_current_file ()
якщо return_value == False:
подія.ігнорувати ()
elif reply == messageBox.Немає:
подія.прийняти ()
ще:
подія.ігнорувати ()
def invalid_path_alert_message (self):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Недійсний файл")
messageBox.setText ("Вибране ім'я файлу або шлях не є дійсним. Виберіть a
дійсний файл.")
messageBox.exec ()
якщо __name__ == '__основна__':
app = QApplication (sys.argv)
w = Вікно ()
w.showMaximized ()
sys.вихід (додаток.exec_ ())
Пояснення
Перша частина коду просто імпортує модулі, які будуть використовуватися у всій вибірці:
імпортувати sysвід PyQt5.Імпорт QtWidgets QWidget, QApplication, QVBoxLayout, QHBoxLayout
від PyQt5.Імпорт QtWidgets QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
від PyQt5.Імпорт QtGui QKeySequence
з PyQt5 імпортувати Qt
У наступній частині створюється новий клас під назвою “Вікно”, який успадковується від класу “QWidget”. Клас QWidget надає часто використовувані графічні компоненти в Qt. Використовуючи “super”, ви можете забезпечити повернення батьківського об’єкта Qt.
Вікно класу (QWidget):def __init __ (self):
супер ().__у цьому__()
Деякі змінні визначені в наступній частині. Шлях до файлу за замовчуванням встановлений у „Немає” та ярлики для відкриття файлу за допомогою
себе.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), self)
себе.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 (True)
себе.заголовок.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.назва)
себе.setLayout (vbox)
Далі до макета додається область тексту за допомогою об'єкта QTextEdit. Віджет QTextEdit надасть вам редаговану, прокручувану область для роботи. Цей віджет підтримує типове копіювання, вставлення, вирізання, скасування, повтор, вибір усіх тощо. Гарячі клавіши. Ви також можете використовувати контекстне меню правою кнопкою миші в текстовій області.
себе.scrollable_text_area = QTextEdit ()vbox.addWidget (self.прокручуваний_текст_площа)
Метод “open_new_fie” викликається, коли користувач завершує
себе.file_path, filter_type = QFileDialog.getOpenFileName (self, "Відкрити новий файл", "",
"Усі файли (*)")
якщо сам.шлях_файлу:
з відкритою (самост.file_path, "r") як f:
file_contents = f.читати ()
себе.заголовок.setText (self.шлях_файлу)
себе.прокручуваний_текст_площа.setText (вміст_файлу)
ще:
себе.invalid_path_alert_message ()
Метод “save_current_file” викликається щоразу, коли користувач завершує
якщо не я.шлях_файлу:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Зберегти цей файл
як… "," "," Усі файли (*) ")
якщо new_file_path:
себе.file_path = new_file_path
ще:
себе.invalid_path_alert_message ()
повернення False
file_contents = self.прокручуваний_текст_площа.toPlainText ()
з відкритою (самост.file_path, "w") як f:
f.запис (вміст_файлу)
себе.заголовок.setText (self.шлях_файлу)
Метод “closeEvent” є частиною API обробки подій PyQt5. Цей метод викликається щоразу, коли користувач намагається закрити вікно за допомогою кнопки перехрестя або натискання
messageBox = QMessageBox ()
title = "Вийти із програми?"
message = "ПОПЕРЕДЖЕННЯ !!\ n \ nЯкщо ви вийдете без збереження, будь-які зміни, внесені у файл, будуть
загубитися.\ n \ nЗбережіть файл перед виходом?"
відповідь = messageBox.питання (self, title, message, messageBox.Так | messageBox.Ні |
messageBox.Скасувати, messageBox.Скасувати)
якщо відповідь == messageBox.Так:
return_value = self.save_current_file ()
якщо return_value == False:
подія.ігнорувати ()
elif reply == messageBox.Немає:
подія.прийняти ()
ще:
подія.ігнорувати ()
У вікні попередження "недійсний файл" немає жодних наворотів. Він просто передає повідомлення, що шлях до файлу неможливо визначити.
def invalid_path_alert_message (self):messageBox = QMessageBox ()
messageBox.setWindowTitle ("Недійсний файл")
messageBox.setText ("Вибране ім'я файлу або шлях не є дійсним. Виберіть дійсний файл.")
messageBox.exec ()
Нарешті, основний цикл програми для обробки подій та малювання віджетів запускається за допомогою “.метод exec_ () ”.
якщо __name__ == '__основна__':app = QApplication (sys.argv)
w = Вікно ()
w.showMaximized ()
sys.вихід (додаток.exec_ ())
Запуск програми
Просто збережіть повний код у текстовому файлі, встановіть розширення файлу на “.py ”, позначте файл як виконуваний та запустіть його, щоб запустити програму. Наприклад, якщо ім'я файлу “simple_text_editor.py ”, потрібно виконати дві команди:
$ chmod + x простий_текстовий_редактор.py$ ./ simple_text_editor.py
Що можна зробити для вдосконалення кодексу
Описаний вище код чудово працює для текстового редактора з оголеними кістками. Однак він може не бути корисним для практичних цілей, оскільки йому бракує багатьох функцій, які часто зустрічаються в хороших текстових редакторах. Ви можете вдосконалити код, додавши нові функції, такі як номери рядків, виділення рядків, підсвічування синтаксису, кілька вкладок, збереження сеансів, панель інструментів, випадаючі меню, виявлення змін буфера тощо.
Висновок
Ця стаття в основному присвячена забезпеченню початкової бази для створення програм PyQt. Якщо ви виявили помилки в коді або хочете щось запропонувати, вітайте відгук.