Namestitev PyQt5 v Linux
Če želite namestiti PyQt5 v najnovejšo različico Ubuntuja, zaženite spodnji ukaz:
$ sudo apt namestite python3-pyqt5Če uporabljate katero koli drugo distribucijo Linuxa, poiščite izraz »Pyqt5« v upravitelju paketov in ga od tam namestite. Lahko pa namestite PyQt5 iz upravitelja paketov pip z uporabo spodnjega ukaza:
$ pip namestite pyqt5Upoštevajte, da boste v nekaterih distribucijah morda morali uporabiti ukaz pip3 za pravilno namestitev PyQt5.
Celotna koda
Vnaprej objavljam celotno kodo, da boste lahko bolje razumeli kontekst za posamezne delčke kode, razložene v nadaljevanju članka. Če poznate Python in PyQt5, se lahko sklicujete na spodnjo kodo in preskočite razlago.
#!/ usr / bin / env python3uvoz sys
iz PyQt5.QtWidgets uvozi QWidget, QApplication, QVBoxLayout, QHBoxLayout
iz PyQt5.QtWidgets uvozi QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
iz PyQt5.QtGui uvozi QKeySequence
iz PyQt5 uvozi Qt
okno razreda (QWidget):
def __init __ (samo):
super ().__v__()
sebe.file_path = Brez
sebe.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), samo)
sebe.open_new_file_shortcut.aktivirano.povezati (samo.open_new_file)
sebe.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), samo)
sebe.save_current_file_shortcut.aktivirano.povezati (samo.save_current_file)
vbox = QVBoxLayout ()
text = "Datoteka brez naslova"
sebe.title = QLabel (besedilo)
sebe.naslov.setWordWrap (True)
sebe.naslov.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.naslov)
sebe.setLayout (vbox)
sebe.scrollable_text_area = QTextEdit ()
vbox.addWidget (self.scrollable_text_area)
def open_new_file (self):
sebe.pot do datoteke, filter_type = QFileDialog.getOpenFileName (self, "Odpri novo datoteko",
"", "Vse datoteke (*)")
če jaz.pot do datoteke:
z odprtim (self.file_path, "r") kot f:
file_contents = f.preberi ()
sebe.naslov.setText (self.pot_datoteke)
sebe.scrollable_text_area.setText (vsebina_datoteke)
sicer:
sebe.invalid_path_alert_message ()
def save_current_file (self):
če ne jaz.pot do datoteke:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Shrani to datoteko
kot… "," "," Vse datoteke (*) ")
če nova_pot_datoteke:
sebe.file_path = new_file_path
sicer:
sebe.invalid_path_alert_message ()
vrnitev False
file_contents = self.scrollable_text_area.toPlainText ()
z odprtim (self.datoteka_pot, "w") kot f:
f.pisanje (vsebina_datoteke)
sebe.naslov.setText (self.pot_datoteke)
def closeEvent (self, dogodek):
messageBox = QMessageBox ()
title = "Zapri aplikacijo?"
message = "OPOZORILO !!\ n \ nČe zaprete, ne da bi shranili, bodo vse spremembe datoteke narejene
bo izgubljeno.\ n \ nShranite datoteko pred izhodom?"
reply = messageBox.vprašanje (self, naslov, sporočilo, messageBox.Da | messageBox.Ne |
messageBox.Prekliči, messageBox.Prekliči)
če je odgovor == messageBox.Da:
return_value = self.save_current_file ()
če je return_value == False:
dogodek.prezri ()
elif reply == messageBox.Št:
dogodek.sprejme ()
sicer:
dogodek.prezri ()
def invalid_path_alert_message (self):
messageBox = QMessageBox ()
messageBox.setWindowTitle ("Neveljavna datoteka")
messageBox.setText ("Izbrano ime datoteke ali pot ni veljavna. Izberite a
veljavna datoteka.")
messageBox.exec ()
če je __name__ == '__main__':
app = QApplication (sys.argv)
w = okno ()
w.showMaximized ()
sys.izhod (app.exec_ ())
Pojasnilo
Prvi del kode samo uvozi module, ki bodo uporabljeni v celotnem vzorcu:
uvoz sysiz PyQt5.QtWidgets uvozi QWidget, QApplication, QVBoxLayout, QHBoxLayout
iz PyQt5.QtWidgets uvozi QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
iz PyQt5.QtGui uvozi QKeySequence
iz PyQt5 uvozi Qt
V naslednjem delu se ustvari nov razred z imenom »Window«, ki podeduje razred »QWidget«. Razred QWidget ponuja pogosto uporabljene grafične komponente v Qt. Z uporabo "super" lahko zagotovite, da se vrne nadrejeni objekt Qt.
okno razreda (QWidget):def __init __ (samo):
super ().__v__()
Nekatere spremenljivke so opredeljene v naslednjem delu. Pot do datoteke je privzeto nastavljena na »Brez« in bližnjice za odpiranje datoteke z uporabo
sebe.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), samo)
sebe.open_new_file_shortcut.aktivirano.povezati (samo.open_new_file)
sebe.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), samo)
sebe.save_current_file_shortcut.aktivirano.povezati (samo.save_current_file)
Z uporabo razreda QVBoxLayout se ustvari nova postavitev, ki ji bodo dodani podrejeni pripomočki. Oznaka, poravnana po sredini, je nastavljena za privzeto ime datoteke z uporabo razreda QLabel.
vbox = QVBoxLayout ()text = "Datoteka brez naslova"
sebe.title = QLabel (besedilo)
sebe.naslov.setWordWrap (True)
sebe.naslov.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (self.naslov)
sebe.setLayout (vbox)
Nato se v postavitev z uporabo predmeta QTextEdit doda besedilno območje. Pripomoček QTextEdit vam bo omogočil urejanje, drsno območje za delo. Ta pripomoček podpira tipično kopiranje, lepljenje, izrezovanje, razveljavitev, ponovitev, izbira vseh itd. bližnjice na tipkovnici. V besedilnem območju lahko uporabite tudi kontekstni meni z desnim klikom.
sebe.scrollable_text_area = QTextEdit ()vbox.addWidget (self.scrollable_text_area)
Metoda “open_new_fie” se pokliče, ko uporabnik dokonča
sebe.pot do datoteke, filter_type = QFileDialog.getOpenFileName (self, "Odpri novo datoteko", "",
"Vse datoteke (*)")
če jaz.pot do datoteke:
z odprtim (self.file_path, "r") kot f:
file_contents = f.preberi ()
sebe.naslov.setText (self.pot_datoteke)
sebe.scrollable_text_area.setText (vsebina_datoteke)
sicer:
sebe.invalid_path_alert_message ()
Metoda "save_current_file" se prikliče vsakič, ko uporabnik dokonča
če ne jaz.pot do datoteke:
new_file_path, filter_type = QFileDialog.getSaveFileName (self, "Shrani to datoteko
kot… "," "," Vse datoteke (*) ")
če je nova_pot_datoteke:
sebe.file_path = new_file_path
sicer:
sebe.invalid_path_alert_message ()
vrnitev False
file_contents = self.scrollable_text_area.toPlainText ()
z odprtim (self.file_path, "w") kot f:
f.pisanje (vsebina_datoteke)
sebe.naslov.setText (self.pot_datoteke)
Metoda “closeEvent” je del API-ja za obdelavo dogodkov PyQt5. Ta metoda se prikliče vsakič, ko poskuša uporabnik zapreti okno s pomočjo gumba za križ ali s pritiskom na
messageBox = QMessageBox ()
title = "Zapri aplikacijo?"
message = "OPOZORILO !!\ n \ nČe zaprete, ne da bi shranili, bodo spremembe v datoteki
biti izgubljen.\ n \ nShranite datoteko pred izhodom?"
reply = messageBox.vprašanje (self, naslov, sporočilo, messageBox.Da | messageBox.Ne |
messageBox.Prekliči, messageBox.Prekliči)
če je odgovor == messageBox.Da:
return_value = self.save_current_file ()
če je return_value == False:
dogodek.prezri ()
elif reply == messageBox.Št:
dogodek.sprejme ()
sicer:
dogodek.prezri ()
V opozorilnem polju »neveljavna datoteka« ni nobenih zvončkov. Preprosto sporoča, da poti datoteke ni mogoče določiti.
def invalid_path_alert_message (self):messageBox = QMessageBox ()
messageBox.setWindowTitle ("Neveljavna datoteka")
messageBox.setText ("Izbrano ime datoteke ali pot ni veljavna. Izberite veljavno datoteko.")
messageBox.exec ()
Nazadnje se glavna aplikacijska zanka za obdelavo dogodkov in risanje pripomočkov zažene z uporabo.exec_ () ”.
če je __name__ == '__main__':app = QApplication (sys.argv)
w = okno ()
w.showMaximized ()
sys.izhod (app.exec_ ())
Zagon aplikacije
Preprosto shranite celotno kodo v besedilno datoteko, nastavite pripono datoteke na ».py «, označite datoteko kot izvršljivo in jo zaženite, da zaženete aplikacijo. Na primer, če je ime datoteke »simple_text_editor.py ”, morate zagnati naslednja dva ukaza:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Stvari, ki jih lahko naredite za izboljšanje kodeksa
Zgoraj razložena koda dobro deluje za urejevalnik besedil z golimi kostmi. Vendar morda ni uporaben za praktične namene, saj nima veliko funkcij, ki jih pogosto vidimo v dobrih urejevalnikih besedil. Kodo lahko izboljšate tako, da dodate nove funkcije, kot so številke vrstic, poudarjanje vrstic, poudarjanje sintakse, več zavihkov, shranjevanje sej, orodna vrstica, spustni meniji, zaznavanje sprememb medpomnilnika itd.
Zaključek
Ta članek se osredotoča predvsem na zagotavljanje izhodišč za ustvarjanje aplikacij PyQt. Če v kodi najdete napake ali želite nekaj predlagati, so povratne informacije dobrodošle.