Inštalácia PyQt5 v systéme Linux
Ak chcete nainštalovať PyQt5 v najnovšej verzii Ubuntu, spustite nasledujúci príkaz:
$ sudo apt nainštalovať python3-pyqt5Ak používate inú distribúciu Linuxu, vyhľadajte v správcovi balíkov výraz „Pyqt5“ a odtiaľ ho nainštalujte. Prípadne môžete nainštalovať PyQt5 zo správcu balíkov pip pomocou nasledujúceho príkazu:
$ pip nainštalovať pyqt5Upozorňujeme, že v niektorých distribúciách možno budete musieť na správnu inštaláciu PyQt5 použiť príkaz pip3.
Celý kód
Predtým uverejňujem celý kód, aby ste lepšie pochopili kontext pre jednotlivé úryvky kódu vysvetlené ďalej v článku. Ak poznáte Python a PyQt5, stačí sa obrátiť na nasledujúci kód a preskočiť vysvetlenie.
#!/ usr / bin / env python3import sys
z PyQt5.QtWidgets importujú QWidget, QApplication, QVBoxLayout, QHBoxLayout
z PyQt5.QtWidgets importujú QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
z PyQt5.QtGui importuje QKeySequence
z PyQt5 import Qt
okno triedy (QWidget):
def __init __ (self):
Super().__init __ ()
ja.file_path = Žiadne
ja.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), vlastné)
ja.open_new_file_shortcut.aktivovaný.spojiť (seba.open_new_file)
ja.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), vlastné)
ja.save_current_file_shortcut.aktivovaný.spojiť (seba.save_current_file)
vbox = QVBoxLayout ()
text = "Súbor bez názvu"
ja.názov = QLabel (text)
ja.titul.setWordWrap (True)
ja.titul.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (vlastné.názov)
ja.setLayout (vbox)
ja.scrollable_text_area = QTextEdit ()
vbox.addWidget (vlastné.scrollable_text_area)
def open_new_file (self):
ja.cesta_souboru, filter_type = QFileDialog.getOpenFileName (self, "Otvoriť nový súbor"),
"", "Všetky súbory (*)")
ak ja.cesta k súboru:
s otvoreným (vlastným.cesta_souboru, "r") ako f:
file_contents = f.čítať()
ja.titul.setText (vlastné.cesta k súboru)
ja.scrollable_text_area.setText (obsah_súboru)
inak:
ja.invalid_path_alert_message ()
def save_current_file (self):
ak nie ja.cesta k súboru:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Uložiť tento súbor."
ako ... "," "," Všetky súbory (*) ")
ak new_file_path:
ja.cesta k_súboru = cesta k novému_súboru
inak:
ja.invalid_path_alert_message ()
návrat False
file_contents = self.scrollable_text_area.toPlainText ()
s otvoreným (vlastným.cesta_souboru, "w") ako f:
f.write (file_contents)
ja.titul.setText (vlastné.cesta k súboru)
def closeEvent (seba, udalosť):
messageBox = QMessageBox ()
title = "Ukončiť aplikáciu?„
message = "VAROVANIE !!\ n \ nAk ukončíte program bez uloženia, vykonajú sa akékoľvek zmeny v súbore
bude stratený.\ n \ nPred ukončením uložte súbor?„
reply = messageBox.otázka (ja, titul, správa, messageBox.Áno | messageBox.Nie |
messageBox.Zrušiť, messageBox.Zrušiť)
ak odpoveď == messageBox.Áno:
return_value = self.save_current_file ()
if return_value == False:
udalosť.ignorovať()
elif odpoveď == messageBox.Č
udalosť.súhlasiť()
inak:
udalosť.ignorovať()
def invalid_path_alert_message (self):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Neplatný súbor")
messageBox.setText ("Vybratý názov súboru alebo cesta nie je platný. Vyberte a
platný súbor.„)
messageBox.exec ()
ak __name__ == '__main__':
app = QApplication (sys.argv)
w = okno ()
w.showMaximized ()
sys.výstup (app.exec_ ())
Vysvetlenie
Prvá časť kódu iba importuje moduly, ktoré sa použijú v celej vzorke:
import sysz PyQt5.QtWidgets importujú QWidget, QApplication, QVBoxLayout, QHBoxLayout
z PyQt5.QtWidgets importujú QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
z PyQt5.QtGui importuje QKeySequence
z PyQt5 import Qt
V nasledujúcej časti je vytvorená nová trieda s názvom „Okno“, ktorá dedí z triedy „QWidget“. Trieda QWidget poskytuje bežne používané grafické komponenty v Qt. Použitím výrazu „super“ môžete zabezpečiť, aby sa vrátil rodičovský objekt Qt.
okno triedy (QWidget):def __init __ (self):
Super().__init __ ()
Niektoré premenné sú definované v nasledujúcej časti. Cesta k súboru je predvolene nastavená na „Žiadna“ a skratky pre otvorenie súboru pomocou
ja.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), vlastné)
ja.open_new_file_shortcut.aktivovaný.spojiť (seba.open_new_file)
ja.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), vlastné)
ja.save_current_file_shortcut.aktivovaný.spojiť (seba.save_current_file)
Pomocou triedy QVBoxLayout sa vytvorí nové rozloženie, do ktorého sa pridajú podradené widgety. Pre predvolený názov súboru je pomocou triedy QLabel nastavený štítok zarovnaný na stred.
vbox = QVBoxLayout ()text = "Súbor bez názvu"
ja.názov = QLabel (text)
ja.titul.setWordWrap (True)
ja.titul.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (vlastné.názov)
ja.setLayout (vbox)
Ďalej sa do rozloženia pridá textová oblasť pomocou objektu QTextEdit. Widget QTextEdit vám poskytne upraviteľnú a posúvateľnú oblasť, s ktorou môžete pracovať. Tento widget podporuje typické kopírovanie, vkladanie, vystrihovanie, vrátenie, opakovanie, výber všetkých atď. klávesové skratky. Môžete tiež použiť kontextové menu pravým tlačidlom myši v textovej oblasti.
ja.scrollable_text_area = QTextEdit ()vbox.addWidget (vlastné.scrollable_text_area)
Metóda „open_new_fie“ sa volá, keď používateľ dokončí prácu
ja.cesta_souboru, filter_type = QFileDialog.getOpenFileName (self, "Otvoriť nový súbor", "",
"Všetky súbory (*)")
ak ja.cesta k súboru:
s otvoreným (vlastným.cesta_souboru, "r") ako f:
file_contents = f.čítať()
ja.titul.setText (vlastné.cesta k súboru)
ja.scrollable_text_area.setText (obsah_súboru)
inak:
ja.invalid_path_alert_message ()
Metóda „save_current_file“ sa volá vždy, keď používateľ dokončí prácu
ak nie ja.cesta k súboru:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Uložiť tento súbor."
ako ... "," "," Všetky súbory (*) ")
ak new_file_path:
ja.cesta k_súboru = cesta k novému_súboru
inak:
ja.invalid_path_alert_message ()
návrat False
file_contents = self.scrollable_text_area.toPlainText ()
s otvoreným (vlastným.cesta_souboru, "w") ako f:
f.write (file_contents)
ja.titul.setText (vlastné.cesta k súboru)
Metóda „closeEvent“ je súčasťou API na spracovanie udalostí PyQt5. Táto metóda sa volá vždy, keď sa používateľ pokúsi zavrieť okno pomocou krížového tlačidla alebo úderu
messageBox = QMessageBox ()
title = "Ukončiť aplikáciu?„
message = "UPOZORNENIE !!\ n \ nAk ukončíte program bez uloženia, vykonajú sa všetky zmeny vykonané v súbore
byť stratený.\ n \ nPred ukončením uložte súbor?„
reply = messageBox.otázka (ja, titul, správa, messageBox.Áno | messageBox.Nie |
messageBox.Zrušiť, messageBox.Zrušiť)
ak odpoveď == messageBox.Áno:
return_value = self.save_current_file ()
if return_value == False:
udalosť.ignorovať()
elif odpoveď == messageBox.Č
udalosť.súhlasiť()
inak:
udalosť.ignorovať()
Výstražné pole „Neplatný súbor“ nemá žiadne zvončeky a píšťalky. Poskytuje iba správu, že cestu k súboru nebolo možné určiť.
def invalid_path_alert_message (self):messageBox = QMessageBox ()
messageBox.setWindowTitle ("Neplatný súbor")
messageBox.setText ("Vybratý názov súboru alebo cesta nie je platný. Vyberte platný súbor.„)
messageBox.exec ()
Nakoniec sa hlavná slučka aplikácie na spracovanie udalostí a kreslenie widgetov spustí pomocou znaku „.metóda exec_ () “.
ak __name__ == '__main__':app = QApplication (sys.argv)
w = okno ()
w.showMaximized ()
sys.výstup (app.exec_ ())
Spustenie aplikácie
Stačí uložiť celý kód do textového súboru, nastaviť príponu súboru na „.py ”, označte súbor ako spustiteľný a spustite ho na spustenie aplikácie. Napríklad ak je názov súboru „simple_text_editor.py ”, musíte spustiť nasledujúce dva príkazy:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Čo môžete urobiť pre vylepšenie kódexu
Vyššie uvedený kód funguje dobre pre textový editor s holými kosťami. Z praktických dôvodov to však nemusí byť užitočné, pretože mu chýba veľa funkcií, ktoré sa bežne vyskytujú v dobrých textových editoroch. Kód môžete vylepšiť pridaním nových funkcií, ako sú čísla riadkov, zvýraznenie riadkov, zvýraznenie syntaxe, viac kariet, ukladanie relácií, panel s nástrojmi, rozbaľovacie ponuky, detekcia zmien vyrovnávacej pamäte atď.
Záver
Tento článok sa zameriava hlavne na poskytnutie východiska pre vytváranie aplikácií PyQt. Ak nájdete v kóde chyby alebo chcete niečo navrhnúť, spätná väzba je vítaná.