Инсталиране на 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
клас Window (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 = "Файл без заглавие"
себе си.заглавие = QLabel (текст)
себе си.заглавие.setWordWrap (Вярно)
себе си.заглавие.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (самостоятелно.заглавие)
себе си.setLayout (vbox)
себе си.scrollable_text_area = QTextEdit ()
vbox.addWidget (самостоятелно.scrollable_text_area)
def open_new_file (самостоятелно):
себе си.file_path, filter_type = QFileDialog.getOpenFileName (самостоятелно, "Отваряне на нов файл",
"", "Всички файлове (*)")
ако аз.файлова пътека:
с отворен (самостоятелно.file_path, "r") като f:
file_contents = f.Прочети()
себе си.заглавие.setText (самостоятелно.файлова пътека)
себе си.scrollable_text_area.setText (файл_съдържание)
друго:
себе си.invalid_path_alert_message ()
def 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 = самостоятелно.scrollable_text_area.toPlainText ()
с отворен (самостоятелно.file_path, "w") като f:
е.запис (file_contents)
себе си.заглавие.setText (самостоятелно.файлова пътека)
def closeEvent (самостоятелно, събитие):
messageBox = QMessageBox ()
title = "Изход от приложението?"
message = "ПРЕДУПРЕЖДЕНИЕ !!\ n \ nАко излезете, без да запазвате, всички промени, направени във файла
ще се загуби.\ n \ nЗапишете файла преди да излезете?"
reply = messageBox.въпрос (самостоятелно, заглавие, съобщение, messageBox.Да | messageBox.Не |
messageBox.Отказ, messageBox.Отказ)
ако отговорът == messageBox.Да:
return_value = самостоятелно.save_current_file ()
ако return_value == False:
събитие.игнорира ()
elif reply == messageBox.Не:
събитие.приемете ()
друго:
събитие.игнорира ()
def invalid_path_alert_message (самостоятелно):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Невалиден файл")
messageBox.setText ("Избраното име на файл или път не е валидно. Моля, изберете a
валиден файл.")
messageBox.exec ()
ако __name__ == '__main__':
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
В следващата част се създава нов клас, наречен “Window”, който наследява от клас “QWidget”. Класът QWidget предоставя често използвани графични компоненти в Qt. Използвайки “super”, можете да се уверите, че родителският Qt обект се връща.
клас Window (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 = "Файл без заглавие"
себе си.заглавие = QLabel (текст)
себе си.заглавие.setWordWrap (Вярно)
себе си.заглавие.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (самостоятелно.заглавие)
себе си.setLayout (vbox)
След това към оформлението се добавя текстова област с помощта на обект QTextEdit. Приспособлението QTextEdit ще ви даде редактируема, превъртаща се област, с която да работите. Тази джаджа поддържа типично копиране, поставяне, изрязване, отмяна, повторение, избор на всички и т.н. комбинация от клавиши. Можете също да използвате контекстното меню с десен бутон в текстовата област.
себе си.scrollable_text_area = QTextEdit ()vbox.addWidget (самостоятелно.scrollable_text_area)
Методът „open_new_fie“ се извиква, когато потребителят завърши
себе си.file_path, filter_type = QFileDialog.getOpenFileName (самостоятелно, "Отваряне на нов файл", "",
"Всички файлове (*)")
ако аз.файлова пътека:
с отворен (самостоятелно.file_path, "r") като f:
file_contents = f.Прочети()
себе си.заглавие.setText (самостоятелно.файлова пътека)
себе си.scrollable_text_area.setText (file_contents)
друго:
себе си.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 = самостоятелно.scrollable_text_area.toPlainText ()
с отворен (самостоятелно.file_path, "w") като f:
е.запис (file_contents)
себе си.заглавие.setText (самостоятелно.файлова пътека)
Методът „closeEvent“ е част от API за обработка на събития PyQt5. Този метод се извиква всеки път, когато потребител се опита да затвори прозорец с помощта на кръстосания бутон или чрез натискане
messageBox = QMessageBox ()
title = "Изход от приложението?"
message = "ПРЕДУПРЕЖДЕНИЕ !!\ n \ nАко излезете, без да запазвате, всички промени, направени във файла, ще бъдат
изгубен.\ n \ nЗапишете файла преди да излезете?"
reply = messageBox.въпрос (самостоятелно, заглавие, съобщение, messageBox.Да | messageBox.Не |
messageBox.Отказ, messageBox.Отказ)
ако отговорът == messageBox.Да:
return_value = самостоятелно.save_current_file ()
ако return_value == False:
събитие.игнорира ()
elif reply == messageBox.Не:
събитие.приемете ()
друго:
събитие.игнорира ()
В предупредителното поле „невалиден файл“ няма звънци и свирки. Той просто предава съобщението, че пътят на файла не може да бъде определен.
def invalid_path_alert_message (самостоятелно):messageBox = QMessageBox ()
messageBox.setWindowTitle ("Невалиден файл")
messageBox.setText ("Избраното име на файл или път не е валидно. Моля, изберете валиден файл.")
messageBox.exec ()
И накрая, основният цикъл на приложение за обработка на събития и изчертаване на приспособления се стартира с помощта на „.метод exec_ () ”.
ако __name__ == '__main__':app = QApplication (sys.argv)
w = прозорец ()
w.showMaximized ()
sys.изход (ап.exec_ ())
Стартиране на приложението
Просто запазете пълния код в текстов файл, задайте разширението на файла на „.py ”, маркирайте изпълнимия файл и го стартирайте, за да стартирате приложението. Например, ако името на файла е “simple_text_editor.py ”, трябва да изпълните следните две команди:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Неща, които можете да направите, за да подобрите кода
Обясненият по-горе код работи добре за текстов редактор с голи кости. Той обаче може да не е полезен за практически цели, тъй като му липсват много функции, често срещани в добрите текстови редактори. Можете да подобрите кода, като добавите нови функции като номера на редове, подчертаване на редове, подчертаване на синтаксис, множество раздели, запазване на сесия, лента с инструменти, падащи менюта, откриване на промяна на буфера и т.н.
Заключение
Тази статия се фокусира главно върху предоставянето на отправна основа за създаване на приложения на PyQt. Ако откриете грешки в кода или искате да предложите нещо, обратната връзка е добре дошла.