Installere PyQt5 i Linux
For å installere PyQt5 i den nyeste versjonen av Ubuntu, kjør kommandoen nedenfor:
$ sudo apt installere python3-pyqt5Hvis du bruker en annen Linux-distribusjon, kan du søke etter begrepet "Pyqt5" i pakkehåndtereren og installere det derfra. Alternativt kan du installere PyQt5 fra pip-pakkebehandling ved å bruke kommandoen nedenfor:
$ pip installer pyqt5Merk at i noen distribusjoner må du kanskje bruke pip3-kommandoen for å installere PyQt5 riktig.
Full kode
Jeg legger ut full kode på forhånd, slik at du bedre kan forstå sammenhengen for individuelle kodebiter som er forklart senere i artikkelen. Hvis du er kjent med Python og PyQt5, kan du bare referere til koden nedenfor og hoppe over forklaringen.
#!/ usr / bin / env python3importer sys
fra PyQt5.QtWidgets importerer QWidget, QApplication, QVBoxLayout, QHBoxLayout
fra PyQt5.QtWidgets importerer QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
fra PyQt5.QtGui importerer QKeySequence
fra PyQt5 importerer Qt
klasse Vindu (QWidget):
def __init __ (selv):
super().__i det__()
selv-.file_path = Ingen
selv-.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), selv)
selv-.open_new_file_shortcut.aktivert.koble (selv.open_new_file)
selv-.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), selv)
selv-.save_current_file_shortcut.aktivert.koble (selv.save_current_file)
vbox = QVBoxLayout ()
text = "Uten tittel fil"
selv-.title = QLabel (tekst)
selv-.tittel.setWordWrap (True)
selv-.tittel.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (selvtill.tittel)
selv-.setLayout (vbox)
selv-.scrollable_text_area = QTextEdit ()
vbox.addWidget (selvtill.rullbart_tekstområde)
def open_new_file (selv):
selv-.file_path, filter_type = QFileDialog.getOpenFileName (selv, "Åpne ny fil",
"", "Alle filer (*)")
hvis selv.file_path:
med åpen (selvtillit.file_path, "r") som f:
file_contents = f.lese()
selv-.tittel.setText (selv.file_path)
selv-.rullbart_tekstområde.setText (file_contents)
ellers:
selv-.invalid_path_alert_message ()
def save_current_file (selv):
hvis ikke selv.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName (selv, "Lagre denne filen
som ... "," "," Alle filer (*) ")
hvis ny_fil_sti:
selv-.file_path = new_file_path
ellers:
selv-.invalid_path_alert_message ()
returner Falsk
file_contents = selvtillit.rullbart_tekstområde.toPlainText ()
med åpen (selvtillit.file_path, "w") som f:
f.skriv (filinnhold)
selv-.tittel.setText (selv.file_path)
def closeEvent (selv, begivenhet):
messageBox = QMessageBox ()
title = "Avslutt søknad?"
message = "ADVARSEL !!\ n \ nHvis du slutter uten å lagre, blir det gjort endringer i filen
Vil gå tapt.\ n \ nLagre filen før du slutter?"
svar = meldingsboks.spørsmål (selv, tittel, melding, messageBox.Ja | meldingsboks.Nei |
meldingsboks.Avbryt, meldingBoks.Avbryt)
hvis svar == meldingBoks.Ja:
return_value = selvtillit.save_current_file ()
if return_value == False:
begivenhet.overse()
elif svar == meldingBoks.Nei:
begivenhet.aksepterer()
ellers:
begivenhet.overse()
def invalid_path_alert_message (selv):
messageBox = QMessageBox ()
meldingsboks.setWindowTitle ("Ugyldig fil")
meldingsboks.setText ("Valgt filnavn eller sti er ikke gyldig. Velg en
gyldig fil.")
meldingsboks.utføre ()
hvis __name__ == '__main__':
app = QApplication (sys.argv)
w = Vindu ()
w.visMaksimert ()
sys.exit (app.exec_ ())
Forklaring
Den første delen av koden importerer bare moduler som skal brukes gjennom hele prøven:
importer sysfra PyQt5.QtWidgets importerer QWidget, QApplication, QVBoxLayout, QHBoxLayout
fra PyQt5.QtWidgets importerer QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
fra PyQt5.QtGui importerer QKeySequence
fra PyQt5 importerer Qt
I neste del opprettes en ny klasse kalt “Window” som arver fra “QWidget” -klassen. QWidget-klassen gir ofte brukte grafiske komponenter i Qt. Ved å bruke “super” kan du sikre at det overordnede Qt-objektet returneres.
klasse Vindu (QWidget):def __init __ (selv):
super().__i det__()
Noen variabler er definert i neste del. Filbanen er satt til "Ingen" som standard og snarveier for å åpne en fil ved hjelp av
selv-.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), selv)
selv-.open_new_file_shortcut.aktivert.koble (selv.open_new_file)
selv-.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), selv)
selv-.save_current_file_shortcut.aktivert.koble (selv.save_current_file)
Ved bruk av QVBoxLayout-klasse opprettes et nytt oppsett som underordnede widgets vil bli lagt til. En senterjustert etikett er angitt for standardfilnavnet ved bruk av QLabel-klassen.
vbox = QVBoxLayout ()text = "Uten tittel fil"
selv-.title = QLabel (tekst)
selv-.tittel.setWordWrap (True)
selv-.tittel.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (selvtill.tittel)
selv-.setLayout (vbox)
Deretter legges et tekstområde til layoutet ved hjelp av et QTextEdit-objekt. QTextEdit-modulen gir deg et redigerbart, rullbart område å jobbe med. Denne widgeten støtter typisk kopiering, lim inn, klipp ut, angre, gjør om, velg alt osv. tastatursnarveier. Du kan også bruke en høyreklikk hurtigmeny i tekstområdet.
selv-.scrollable_text_area = QTextEdit ()vbox.addWidget (selvtill.scrollable_text_area)
"Open_new_fie" -metoden kalles når en bruker fullfører
selv-.file_path, filter_type = QFileDialog.getOpenFileName (selv, "Åpne ny fil", "",
"Alle filer (*)")
hvis selv.file_path:
med åpen (selvtillit.file_path, "r") som f:
file_contents = f.lese()
selv-.tittel.setText (selv.file_path)
selv-.rullbart_tekstområde.setText (file_contents)
ellers:
selv-.invalid_path_alert_message ()
"Save_current_file" -metoden kalles når en bruker fullfører
hvis ikke selv.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName (selv, "Lagre denne filen
som ... "," "," Alle filer (*) ")
hvis ny_fil_sti:
selv-.file_path = new_file_path
ellers:
selv-.invalid_path_alert_message ()
returner Falsk
file_contents = selvtillit.rullbart_tekstområde.toPlainText ()
med åpen (selvtillit.file_path, "w") som f:
f.skriv (filinnhold)
selv-.tittel.setText (selv.file_path)
Metoden “closeEvent” er en del av PyQt5 API for hendelsesbehandling. Denne metoden kalles når en bruker prøver å lukke et vindu ved hjelp av kryss-knappen eller ved å trykke
messageBox = QMessageBox ()
title = "Avslutt søknad?"
message = "ADVARSEL !!\ n \ nHvis du slutter uten å lagre, blir alle endringer i filen gjort
være tapt.\ n \ nLagre filen før du slutter?"
svar = meldingsboks.spørsmål (selv, tittel, melding, messageBox.Ja | meldingsboks.Nei |
meldingsboks.Avbryt, meldingBoks.Avbryt)
hvis svar == meldingBoks.Ja:
return_value = selvtillit.save_current_file ()
if return_value == False:
begivenhet.overse()
elif svar == meldingBoks.Nei:
begivenhet.aksepterer()
ellers:
begivenhet.overse()
Varslingsboksen for "ugyldig fil" har ingen bjeller og fløyter. Den formidler bare meldingen om at filstien ikke kunne bestemmes.
def invalid_path_alert_message (selv):messageBox = QMessageBox ()
meldingsboks.setWindowTitle ("Ugyldig fil")
meldingsboks.setText ("Valgt filnavn eller sti er ikke gyldig. Velg en gyldig fil.")
meldingsboks.utføre ()
Til slutt startes den viktigste applikasjonssløyfen for hendelsesbehandling og tegning av widgets ved å bruke “.exec_ () ”-metoden.
hvis __name__ == '__main__':app = QApplication (sys.argv)
w = Vindu ()
w.visMaksimert ()
sys.exit (app.exec_ ())
Kjører appen
Bare lagre full kode i en tekstfil, sett filtypen til “.py ”, merk filen som kjøres og kjør den for å starte appen. For eksempel hvis filnavnet er “simple_text_editor.py ”, må du kjøre etter to kommandoer:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Ting du kan gjøre for å forbedre koden
Koden forklart ovenfor fungerer bra for en tekstbehandler med bare bein. Det kan imidlertid ikke være nyttig for praktiske formål, da det mangler mange funksjoner som ofte sees i gode tekstredigerere. Du kan forbedre koden ved å legge til nye funksjoner som linjenumre, linjeheving, syntaksheving, flere faner, øktlagring, verktøylinje, rullegardinmenyer, deteksjon av bufferendring osv.
Konklusjon
Denne artikkelen fokuserer hovedsakelig på å gi et utgangspunkt for å lage PyQt-apper. Hvis du finner feil i koden eller vil foreslå noe, er tilbakemelding velkommen.