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ájltHa 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 pyqt5Vegye 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 python3import 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 sysa 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
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
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
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
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.