RkBlog

Hardware, programming and astronomy tutorials and reviews.

Prosty edytor tekstowy

Tworzymy prosty edytor tekstowy w PyQt3 z wykorzystaniem QtDesigera i zestawu podstawowych widgetów - QFileDialog, QMessageBox, czy QPushButton

Tworzymy prosty edytor tekstowy korzystając z QFileDialog, QMessageBox i kilku standardowych widgetów. Tworzmy okno z widgetami:
pyqt19
"Plik" i "Brak Pliku" to dwie TextLabel, przciski to QPushButton, duże okno na tekst to QTextEditor. Przycisk "Zamknij" ma sygnał wycelowany na Formularz ze slotem "close()" (zamyka aplikację).
Następnie tworzymy trzy funkcje: otworz, zapisz i zapisz_jako. Ustaw sygnały z pozostałych przycisków na Formularz przypisując w SLOTach odpowiednie funkcje. U mnie dla domyślnych nazw pushButtonów:
pyqt20
Kod funkcji:
void Form1::otworz()
{
self.a = QFileDialog(self)
file = QFileDialog.getOpenFileName()
# ustawiamy tekst etykiety z "Brak Pliku" na nazwę pliku
self.textLabel1.setText(file)
# file nie jest napisem lecz Qczymś ala napis, więc trzeba to przekonwertować
# wczytujemy zawartość pliku
plik = open(str(file))
try:
        tekst = plik.read()
finally:
        plik.close()
#ustawiamy tekst TextEdit na ten z pliku
self.textEdit1.setText(tekst)
}

void Form1::zapisz()
{
#jeżeli plik otwarty to można zapisać
if (str(self.textLabel1.text()) != '<p align="center">Brak Pliku</p>'):
  plik = open(str(self.textLabel1.text()), 'w')
  plik.write(str(self.textEdit1.text()))
  plik.close()
  #tworzymy nowy QMessageBox, podajemy tekst i wyświetlamy
  self.a = QMessageBox(self)
  self.a.setText("Zapisano zmiany")
  self.a.show()
}

void Form1::zapisz_jako()
{
# to ma jedną wadę - nie przyjmuje nazw nieistniejących plików...
if (str(self.textLabel1.text()) != '<p align="center">Brak Pliku</p>'):
    self.a = QFileDialog(self)
    file = QFileDialog.getOpenFileName()
    if (str(file) != ""):
       plik = open(str(file), 'w')
       plik.write(str(self.textEdit1.text()))
       plik.close()
       self.b = QMessageBox(self)
       self.b.setText("Zapisano zmiany")
       self.b.show()
}
Efekt to:
pyqt21
RkBlog

14 July 2008;

Comment article