„PyQt5“ diegimas „Linux“
Norėdami įdiegti „PyQt5“ naujausioje „Ubuntu“ versijoje, vykdykite toliau nurodytą komandą:
$ sudo apt įdiekite python3-pyqt5Jei naudojate bet kurį kitą „Linux“ platinimą, paketų tvarkyklėje ieškokite termino „Pyqt5“ ir įdiekite jį iš ten. Arba galite įdiegti „PyQt5“ iš „pip pack manager“ naudodami toliau nurodytą komandą:
$ pip įdiegti pyqt5Atminkite, kad kai kuriuose platinimuose gali tekti naudoti komandą pip3, kad tinkamai įdiegtumėte PyQt5.
Visas kodas
Iš anksto skelbiu visą kodą, kad galėtumėte geriau suprasti atskirų kodo fragmentų kontekstą, paaiškintą vėliau straipsnyje. Jei esate susipažinę su „Python“ ir „PyQt5“, galite tiesiog kreiptis į toliau pateiktą kodą ir praleisti paaiškinimą.
#!/ usr / bin / env python3importuoti sistemas
iš PyQt5.„QtWidgets“ importuoja „QWidget“, „QApplication“, „QVBoxLayout“, „QHBoxLayout“
iš PyQt5.„QtWidgets“ importuoja „QTextEdit“, „QLabel“, „QShortcut“, „QFileDialog“, „QMessageBox“
iš PyQt5.„QtGui“ importuoti „QKeySequence“
iš PyQt5 importo Qt
klasės langas (QWidget):
def __init __ (savęs):
super ().__init __ ()
savarankiškai.file_path = Nėra
savarankiškai.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), savarankiškai)
savarankiškai.open_new_file_shortcut.suaktyvinta.prisijungti (savarankiškai.open_new_file)
savarankiškai.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), savarankiškai)
savarankiškai.save_current_file_shortcut.suaktyvinta.prisijungti (savarankiškai.save_current_file)
vbox = QVBoxLayout ()
text = "Failas be pavadinimo"
savarankiškai.pavadinimas = QLabel (tekstas)
savarankiškai.pavadinimas.„setWordWrap“ (tiesa)
savarankiškai.pavadinimas.setAlignment (Qt.Qt.„AlignCenter“)
„vbox“.addWidget (self.pavadinimas)
savarankiškai.„setLayout“ („vbox“)
savarankiškai.scrollable_text_area = QTextEdit ()
„vbox“.addWidget (self.scrollable_text_area)
def open_new_file (savarankiškai):
savarankiškai.file_path, filter_type = QFileDialog.getOpenFileName (savarankiškai, „Atidaryti naują failą“,
"", "Visi failai (*)")
jei pats.bylos kelias:
su atviru (savimi.file_path, "r") kaip f:
file_contents = f.skaityti ()
savarankiškai.pavadinimas.setText (self.bylos kelias)
savarankiškai.scrollable_text_area.setText (file_contents)
Kitas:
savarankiškai.invalid_path_alert_message ()
def save_current_file (savarankiškai):
jei ne pats.bylos kelias:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Išsaugokite šį failą
kaip ... "," "," Visi failai (*) ")
if new_file_path:
savarankiškai.failo_kelas = naujas_failo_kelas
Kitas:
savarankiškai.invalid_path_alert_message ()
grąžinti False
file_contents = savarankiškai.scrollable_text_area.toPlainText ()
su atviru (savimi.file_path, "w") kaip f:
f.rašyti (file_contents)
savarankiškai.pavadinimas.setText (self.bylos kelias)
def closeEvent (savęs, įvykio):
messageBox = QMessageBox ()
title = "Uždaryti programą?"
pranešimas = "ĮSPĖJIMAS !!\ n \ nJei išeisite neišsaugoję, visi faile padaryti pakeitimai
bus pamesta.\ n \ nIšsaugokite failą prieš uždarydami?"
atsakymas = messageBox.klausimas (savastis, pavadinimas, žinutė, žinutė.Taip | žinučių dėžutė.Ne |
žinučių dėžutė.Atšaukti, messageBox.Atšaukti)
jei atsakymas == žinučių dėžutė.Taip:
return_value = self.save_current_file ()
if return_value == Klaidinga:
įvykis.ignoruoti ()
elif atsakymas == žinučių dėžutė.Ne:
įvykis.priimti()
Kitas:
įvykis.ignoruoti ()
def invalid_path_alert_message (savęs):
messageBox = QMessageBox ()
žinučių dėžutė.setWindowTitle („Netinkamas failas“)
žinučių dėžutė.setText ("Pasirinktas failo vardas ar kelias neteisingas. Pasirinkite a
galiojantis failas.")
žinučių dėžutė.exec ()
jei __pavadinimas = = '__main__':
app = QApplication (sys.argv)
w = langas ()
w.showMaximized ()
sys.išėjimas (ap.exec_ ()
Paaiškinimas
Pirmoji kodo dalis tiesiog importuoja modulius, kurie bus naudojami visame pavyzdyje:
importuoti sistemasiš PyQt5.„QtWidgets“ importuoja „QWidget“, „QApplication“, „QVBoxLayout“, „QHBoxLayout“
iš PyQt5.„QtWidgets“ importuoja „QTextEdit“, „QLabel“, „QShortcut“, „QFileDialog“, „QMessageBox“
iš PyQt5.„QtGui“ importuoti „QKeySequence“
iš PyQt5 importo Qt
Kitoje dalyje sukuriama nauja klasė pavadinimu „Langas“, kuri paveldima iš „QWidget“ klasės. QWidget klasėje pateikiami dažniausiai naudojami grafiniai komponentai Qt. Naudodami „super“ galite įsitikinti, kad grąžinamas pagrindinis Qt objektas.
klasės langas (QWidget):def __init __ (savęs):
super ().__init __ ()
Kai kurie kintamieji yra apibrėžti kitoje dalyje. Pagal numatytuosius nustatymus failo kelias yra „Nėra“ ir nuorodos, skirtos atidaryti failą naudojant
savarankiškai.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), savarankiškai)
savarankiškai.open_new_file_shortcut.suaktyvinta.prisijungti (savarankiškai.open_new_file)
savarankiškai.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), savarankiškai)
savarankiškai.save_current_file_shortcut.suaktyvinta.prisijungti (savarankiškai.save_current_file)
Naudojant „QVBoxLayout“ klasę, sukuriamas naujas išdėstymas, prie kurio bus pridėti vaikų valdikliai. Pagal QLabel klasę numatytam failo vardui nustatoma centre lygiuota etiketė.
vbox = QVBoxLayout ()text = "Failas be pavadinimo"
savarankiškai.pavadinimas = QLabel (tekstas)
savarankiškai.pavadinimas.„setWordWrap“ (tiesa)
savarankiškai.pavadinimas.setAlignment (Qt.Qt.„AlignCenter“)
„vbox“.addWidget (self.pavadinimas)
savarankiškai.„setLayout“ („vbox“)
Tada teksto sritis į maketą įtraukiama naudojant objektą QTextEdit. „QTextEdit“ valdiklis suteiks jums redaguojamą, slenkamą sritį, su kuria galėsite dirbti. Šis valdiklis palaiko įprastą kopijavimą, įklijavimą, iškarpymą, anuliavimą, perdarymą, visų pasirinkimą ir kt. klaviatūros nuorodos. Taip pat galite naudoti dešiniuoju pelės mygtuku spustelėkite kontekstinį meniu teksto srityje.
savarankiškai.scrollable_text_area = QTextEdit ()„vbox“.addWidget (self.scrollable_text_area)
Metodas „open_new_fie“ iškviečiamas, kai vartotojas užbaigia
savarankiškai.file_path, filter_type = QFileDialog.getOpenFileName (savarankiškai, "Atidaryti naują failą", "",
"Visi failai (*)")
jei pats.bylos kelias:
su atviru (savimi.file_path, "r") kaip f:
file_contents = f.skaityti ()
savarankiškai.pavadinimas.setText (self.bylos kelias)
savarankiškai.scrollable_text_area.setText (file_contents)
Kitas:
savarankiškai.invalid_path_alert_message ()
Metodas „save_current_file“ iškviečiamas, kai tik vartotojas užbaigia
jei ne pats.bylos kelias:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Išsaugokite šį failą
kaip ... "," "," Visi failai (*) ")
if new_file_path:
savarankiškai.failo_kelas = naujas_failo_kelas
Kitas:
savarankiškai.invalid_path_alert_message ()
grąžinti False
file_contents = savarankiškai.scrollable_text_area.toPlainText ()
su atviru (savimi.file_path, "w") kaip f:
f.rašyti (file_contents)
savarankiškai.pavadinimas.setText (self.bylos kelias)
Metodas „closeEvent“ yra „PyQt5“ įvykių tvarkymo API dalis. Šis metodas vadinamas, kai vartotojas bando uždaryti langą naudodamas kryžminį mygtuką arba spustelėdamas
messageBox = QMessageBox ()
title = "Uždaryti programą?"
pranešimas = "ĮSPĖJIMAS !!\ n \ nJei išeisite neišsaugoję, bus atlikti visi failo pakeitimai
pasiklysti.\ n \ nIšsaugokite failą prieš uždarydami?"
atsakymas = messageBox.klausimas (savastis, pavadinimas, žinutė, žinutė.Taip | žinučių dėžutė.Ne |
žinučių dėžutė.Atšaukti, messageBox.Atšaukti)
jei atsakymas == žinučių dėžutė.Taip:
return_value = self.save_current_file ()
if return_value == Klaidinga:
įvykis.ignoruoti ()
elif atsakymas == žinučių dėžutė.Ne:
įvykis.priimti()
Kitas:
įvykis.ignoruoti ()
Įspėjimo laukelyje „netinkamas failas“ nėra varpų ir švilpukų. Tai tiesiog perduoda pranešimą, kad failo kelio nepavyko nustatyti.
def invalid_path_alert_message (savęs):messageBox = QMessageBox ()
žinučių dėžutė.setWindowTitle („Netinkamas failas“)
žinučių dėžutė.setText ("Pasirinktas failo vardas ar kelias neteisingas. Pasirinkite galiojantį failą.")
žinučių dėžutė.exec ()
Galiausiai pagrindinė įvykių tvarkymo ir valdiklių piešimo programa yra pradedama naudojant „.exec_ () “metodas.
jei __pavadinimas = = '__main__':app = QApplication (sys.argv)
w = langas ()
w.showMaximized ()
sys.išėjimas (ap.exec_ ()
Programos paleidimas
Tiesiog išsaugokite visą kodą tekstiniame faile, nustatykite failo plėtinį į „.py “, pažymėkite failą kaip vykdomąjį ir paleiskite jį, kad paleistumėte programą. Pavyzdžiui, jei failo pavadinimas yra „simple_text_editor“.py “, turite paleisti šias dvi komandas:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Dalykai, kuriuos galite padaryti, kad patobulintumėte kodą
Aukščiau paaiškintas kodas puikiai tinka plikų kaulų teksto redaktoriui. Tačiau tai gali būti nenaudinga praktiniais tikslais, nes trūksta daugelio funkcijų, dažniausiai matomų geruose teksto redaktoriuose. Galite patobulinti kodą pridėdami naujų funkcijų, tokių kaip eilutės numeriai, linijų paryškinimas, sintaksės paryškinimas, keli skirtukai, seanso išsaugojimas, įrankių juosta, išskleidžiamieji meniu, buferio pakeitimo aptikimas ir kt.
Išvada
Šiame straipsnyje daugiausia dėmesio skiriama pradinio pagrindo kūrimui „PyQt“ programoms. Jei radote klaidų kode arba norite ką nors pasiūlyti, atsiliepimai yra laukiami.