Piton

Hogyan írhatunk egyszerű szövegszerkesztőt a PyQt5-ben

Hogyan írhatunk egyszerű szövegszerkesztőt a PyQt5-ben
Ez a cikk ismerteti az egyszerű szövegszerkesztő Python3 és PyQt5 létrehozásáról szóló útmutatót. A Qt5 egy több platformon átnyúló, C ++ nyelven írt könyvtár, amely főként gazdag grafikus alkalmazások létrehozására szolgál. A PyQt5 Python-összerendeléseket biztosít a Qt5 legújabb verziójához. Az ebben a cikkben szereplő összes kódmintát a Python 3 teszteli.8.2 és a PyQt5 5. verziója.14.1 az Ubuntu 20-on.04.

A PyQt5 telepítése Linuxra

A PyQt5 telepítéséhez az Ubuntu legújabb verziójába futtassa az alábbi parancsot:

$ sudo apt telepítse a python3-pyqt5 fájlt

Ha bármilyen más Linux disztribúciót használ, keresse meg a „Pyqt5” kifejezést a csomagkezelőben, és telepítse onnan. Alternatív megoldásként telepítheti a PyQt5-et a pip csomagkezelőből az alábbi paranccsal:

$ pip install pyqt5

Vegye figyelembe, hogy egyes disztribúciókban előfordulhat, hogy a Py3 parancs használatával kell a PyQt5 helyesen telepíteni.

Teljes kód

Előzőleg teljes kódot teszek közzé, hogy jobban megértsék az egyes kódrészletek kontextusát, amelyeket a cikk később ismertet. Ha ismeri a Pythonot és a PyQt5-et, akkor csak hivatkozhat az alábbi kódra, és kihagyhatja a magyarázatot.

#!/ usr / bin / env python3
import sys
a PyQt5-ből.A QtWidgets importálja a QWidget, QApplication, QVBoxLayout, QHBoxLayout
a PyQt5-ből.A QtWidgets importálja a QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
a PyQt5-ből.QtGui importálja a QKeySequence-t
a PyQt5 import Qt-ból
osztályablak (QWidget):
def __init __ (én):
szuper().__benne__()
maga.file_path = Nincs
maga.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), önálló)
maga.open_new_file_shortcut.aktív.összekapcsolni (én.open_new_file)
maga.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), önálló)
maga.save_current_file_shortcut.aktív.összekapcsolni (én.save_current_file)
vbox = QVBoxLayout ()
text = "Név nélküli fájl"
maga.cím = QLabel (szöveg)
maga.cím.setWordWrap (True)
maga.cím.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.cím)
maga.setLayout (vbox)
maga.scrollable_text_area = QTextEdit ()
vbox.addWidget (self.scrollable_text_area)
def open_new_file (self):
maga.file_path, filter_type = QFileDialog.getOpenFileName (self, "Új fájl megnyitása",
"", "Minden fájl (*)")
ha önmaga.fájl elérési út:
nyitottal (én.file_path, "r") mint f:
file_contents = f.olvas()
maga.cím.setText (self.fájl elérési út)
maga.scrollable_text_area.setText (fájl_tartalom)
más:
maga.invalid_path_alert_message ()
def save_current_file (self):
ha nem önmaga.fájl elérési út:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Mentse a fájlt
mint… "," "," Minden fájl (*) ")
if new_file_path:
maga.file_path = új_fájl_path
más:
maga.invalid_path_alert_message ()
return False
file_contents = self.scrollable_text_area.toPlainText ()
nyitottal (én.file_path, "w") mint f:
f.ír (fájl_tartalom)
maga.cím.setText (self.fájl elérési út)
def closeEvent (én, esemény):
messageBox = QMessageBox ()
title = "Kilépés az alkalmazásból?"
üzenet = "FIGYELEM !!\ n \ nHa mentés nélkül kilép, akkor a fájlban bármilyen változtatás megtörtént
el fog veszni.\ n \ nMentse a fájlt a kilépés előtt?"
válasz = messageBox.kérdés (én, cím, üzenet, messageBox.Igen | messageBox.Nem
messageBox.Mégse, messageBox.Megszünteti)
ha válasz == messageBox.Igen:
return_value = self.save_current_file ()
ha return_value == Hamis:
esemény.figyelmen kívül hagyni()
elif válasz == messageBox.Nem:
esemény.elfogad()
más:
esemény.figyelmen kívül hagyni()
def invalid_path_alert_message (self):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Érvénytelen fájl")
messageBox.setText ("A kiválasztott fájlnév vagy elérési út érvénytelen. Kérjük, válassza ki a
érvényes fájl.")
messageBox.exec ()
ha __name__ == '__main__':
app = QApplication (sys.argv)
w = ablak ()
w.showMaximized ()
sys.kilépés (kb.exec_ ()

Magyarázat

A kód első része csak olyan modulokat importál, amelyek a mintában használatosak lesznek:

import sys
a PyQt5-ből.A QtWidgets importálja a QWidget, QApplication, QVBoxLayout, QHBoxLayout
a PyQt5-ből.A QtWidgets importálja a QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
a PyQt5-ből.QtGui importálja a QKeySequence-t
a PyQt5 import Qt-ból

A következő részben egy új, „Ablak” nevű osztály jön létre, amely a „QWidget” osztályból örököl. A QWidget osztály a Qt-ben gyakran használt grafikus komponenseket biztosít. A „super” használatával biztosíthatja, hogy a Qt szülő objektum visszatérjen.

osztályablak (QWidget):
def __init __ (én):
szuper().__benne__()

Néhány változót a következő részben definiálunk. A fájl elérési útja alapértelmezés szerint „Nincs”, és a fájl megnyitásához szükséges parancsikonok és fájl mentése a QShortcut osztály segítségével definiálhatók. Ezeket a parancsikonokat ezután összekapcsolják a megfelelő módszereikkel, amelyeket akkor hívnak meg, amikor a felhasználó megnyomja a megadott billentyűkombinációkat.

maga.file_path = Nincs
maga.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), önálló)
maga.open_new_file_shortcut.aktív.összekapcsolni (én.open_new_file)
maga.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), önálló)
maga.save_current_file_shortcut.aktív.összekapcsolni (én.save_current_file)

A QVBoxLayout osztály használatával új elrendezés jön létre, amelyhez hozzáadják a gyermek widgeteket. A QLabel osztály használatával középre igazított címke van beállítva az alapértelmezett fájlnévhez.

vbox = QVBoxLayout ()
text = "Név nélküli fájl"
maga.cím = QLabel (szöveg)
maga.cím.setWordWrap (True)
maga.cím.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.cím)
maga.setLayout (vbox)

Ezután egy szöveges terület kerül hozzáadásra az elrendezéshez egy QTextEdit objektum segítségével. A QTextEdit widget szerkeszthető, görgethető területet biztosít a munkához. Ez a modul támogatja a tipikus másolást, beillesztést, kivágást, visszavonást, újragyártást, az összes kijelölést stb. gyorsbillentyűket. A szövegterületen jobb egérgombbal kattintson a helyi menüre is.

maga.scrollable_text_area = QTextEdit ()
vbox.addWidget (self.scrollable_text_area)

Az „open_new_fie” metódust akkor hívják meg, amikor a felhasználó befejezi billentyűparancs. A QFileDialog osztály fájlválasztó párbeszédpanelt mutat be a felhasználó számára. A fájl elérési útja akkor kerül meghatározásra, amikor a felhasználó kiválaszt egy fájlt a választóból. Ha a fájl elérési útja érvényes, a szöveges tartalmat kiolvassa a fájlból, és QTextEdit widgetre állítja. Ez láthatóvá teszi a szöveget a felhasználó számára, megváltoztatja az új fájlnév címét és befejezi az új fájl megnyitásának folyamatát. Ha valamilyen oknál fogva a fájl elérési útja nem határozható meg, akkor egy „érvénytelen fájl” figyelmeztető mező jelenik meg a felhasználó számára.

def open_new_file (self):
maga.file_path, filter_type = QFileDialog.getOpenFileName (self, "Új fájl megnyitása", "",
"Minden fájl (*)")
ha önmaga.fájl elérési út:
nyitottal (én.file_path, "r") mint f:
file_contents = f.olvas()
maga.cím.setText (self.fájl elérési út)
maga.scrollable_text_area.setText (fájl_tartalom)
más:
maga.invalid_path_alert_message ()

A „save_current_file” metódust akkor hívják meg, amikor a felhasználó befejezi billentyűparancs. Az új fájlútvonal lekérése helyett a QFileDialog most arra kéri a felhasználót, hogy adjon meg egy elérési utat. Ha a fájl elérési útja érvényes, a QTextEdit widgetben látható tartalmat a teljes fájl elérési útjára írjuk, különben egy „érvénytelen fájl” riasztó mező jelenik meg. A szerkesztés alatt álló fájl címe is megváltozik a felhasználó által megadott új helyre.

def save_current_file (self):
ha nem önmaga.fájl elérési út:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Mentse a fájlt
mint… "," "," Minden fájl (*) ")
if new_file_path:
maga.file_path = új_fájl_path
más:
maga.invalid_path_alert_message ()
return False
file_contents = self.scrollable_text_area.toPlainText ()
nyitottal (én.file_path, "w") mint f:
f.ír (fájl_tartalom)
maga.cím.setText (self.fájl elérési út)

A „closeEvent” módszer a PyQt5 eseménykezelő API része. Ezt a módszert akkor hívják meg, amikor a felhasználó megpróbálja bezárni az ablakot a kereszt gombbal vagy az ütéssel billentyűkombináció. A bezárás esemény indításakor a felhasználó egy párbeszédpanelt jelenít meg, amelyben három lehetőség közül választhat: „Igen”, „Nem” és „Mégse”. Az „Igen” gomb elmenti a fájlt és bezárja az alkalmazást, míg a „Nem” gomb bezárja a fájlt a tartalom mentése nélkül. A „Mégse” gomb bezárja a párbeszédpanelt, és visszavezeti a felhasználót az alkalmazáshoz.

def closeEvent (én, esemény):
messageBox = QMessageBox ()
title = "Kilépés az alkalmazásból?"
üzenet = "FIGYELEM !!\ n \ nHa mentés nélkül kilép, akkor a fájlban végrehajtott bármilyen változtatás megtörténik
elveszni.\ n \ nMentse a fájlt a kilépés előtt?"
válasz = messageBox.kérdés (én, cím, üzenet, messageBox.Igen | messageBox.Nem
messageBox.Mégse, messageBox.Megszünteti)
ha válasz == messageBox.Igen:
return_value = self.save_current_file ()
ha return_value == Hamis:
esemény.figyelmen kívül hagyni()
elif válasz == messageBox.Nem:
esemény.elfogad()
más:
esemény.figyelmen kívül hagyni()

Az „érvénytelen fájl” figyelmeztető mezőben nincsenek harangok és sípok. Csak azt az üzenetet közvetíti, hogy a fájl elérési útja nem határozható meg.

def invalid_path_alert_message (self):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Érvénytelen fájl")
messageBox.setText ("A kiválasztott fájlnév vagy elérési út érvénytelen. Kérjük, válasszon érvényes fájlt.")
messageBox.exec ()

Végül az eseménykezelés és a kütyü rajzolásának fő alkalmazásköre a „.exec_ () ”metódus.

ha __name__ == '__main__':
app = QApplication (sys.argv)
w = ablak ()
w.showMaximized ()
sys.kilépés (kb.exec_ ()

Az alkalmazás futtatása

Csak mentse a teljes kódot egy szöveges fájlba, állítsa a fájlkiterjesztést “.py ”jelölje be a futtatható fájlt, és futtassa az alkalmazás elindításához. Például, ha a fájl neve „simple_text_editor.py ”, a következő két parancsot kell futtatnia:

$ chmod + x simple_text_editor.py
$ ./ simple_text_editor.py

A kód javítása érdekében tehetõ dolgok

A fent ismertetett kód jól működik egy csupasz csontú szövegszerkesztőnél. Előfordulhat azonban, hogy gyakorlati célokra nem hasznos, mivel sok olyan funkció hiányzik belőle, amelyet a jó szövegszerkesztők általában látnak. Javíthatja a kódot olyan új funkciók hozzáadásával, mint a sorszámok, a vonal kiemelése, a szintaxis kiemelése, több fül, a munkamenet mentése, az eszköztár, a legördülő menük, a puffer változásának észlelése stb.

Következtetés

Ez a cikk elsősorban a PyQt-alkalmazások létrehozásának kiindulópontjának biztosítására összpontosít. Ha hibákat talál a kódban, vagy valamit javasolni szeretne, szívesen fogadunk visszajelzést.

Telepítse a legújabb OpenRA stratégiai játékot az Ubuntu Linux rendszerre
Az OpenRA egy ingyenes / ingyenes valós idejű stratégiai játékmotor, amely újjáépíti a korai Westwood játékokat, mint például a klasszikus Command & C...
Telepítse a legújabb Dolphin Emulator for Gamecube & Wii szoftvert Linuxra
A Dolphin Emulator segítségével a kiválasztott Gamecube & Wii játékokat játszhatja Linux személyi számítógépeken (PC). Mivel a Dolphin Emulator szaba...
A GameConqueror Cheat Engine használata Linux alatt
A cikk tartalmaz egy útmutatót a GameConqueror csaló motor Linux alatt történő használatáról. Sok olyan felhasználó, aki Windows-on játszik játékot, g...