Prosty edytor tekstowy w PyQT4
14 July 2008
Comments
Naszym celem będzie wykonanie prostego edytora tekstowego (na początek samo przeglądanie). W QTDesigner stworzyłem interfejs (na bazie "Main Window") aplikacji składający się z dwóch PushButton i jednego TextEdit:


pyuic4 edytor.ui > edytor.py
Otrzymując plik z klasą "Ui_notatnik". By uruchomić aplikację użyłem pliku start.py o kodzie:
import sys
from PyQt4 import QtCore, QtGui
# import klasy
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
# nazwa klasy
self.ui = Ui_notatnik()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())

import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_notatnik()
self.ui.setupUi(self)
# tutaj dajemy wlasne polaczenia slotow
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
def file_dialog(self):
self.ui.editor_window.setText('aaaaaaaaaa')
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
Gdzie self.ui to obiekt naszego okna. Poprzez niego możemy dostać się do elementów interfejsu, czyli self.ui.button_open oznacza przycisk "Otwórz Plik". self.file_dialog oznacza nazwę metody, która zostanie wykonana gdy sygnał zostanie wyemitowany. Klasę tą definiuję obok. Ważne jest by własny kod dodawać po self.ui.setupUi(self). Odnośnie slotu:
def file_dialog(self):
self.ui.editor_window.setText('aaaaaaaaaa')
Teraz trzeba użyć QFileDialog by wybrać jakiś plik do otwarcia. Jest to proste:
import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_notatnik()
self.ui.setupUi(self)
# tutaj dajemy wlasne polaczenia slotow
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
def file_dialog(self):
# stworzenie obiektu QFileDialog
fd = QtGui.QFileDialog(self)
# pobranie nazwy wybranego pliku
plik = open(fd.getOpenFileName()).read()
self.ui.editor_window.setText(plik)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
IOError: [Errno 2] Nie ma takiego pliku ani katalogu:

import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_notatnik()
self.ui.setupUi(self)
# tutaj dajemy wlasne polaczenia slotow
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
def file_dialog(self):
fd = QtGui.QFileDialog(self)
self.filename = fd.getOpenFileName()
from os.path import isfile
if isfile(self.filename):
text = open(self.filename).read()
self.ui.editor_window.setText(text)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
pyuic4 edytor.ui > edytor.py
I możemy rozbudowywać nasz edytor, który teraz wygląda tak:

import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_notatnik()
self.ui.setupUi(self)
# tutaj dajemy wlasne polaczenia slotow
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
QtCore.QObject.connect(self.ui.button_save,QtCore.SIGNAL("clicked()"), self.file_save)
def file_dialog(self):
fd = QtGui.QFileDialog(self)
self.filename = fd.getOpenFileName()
from os.path import isfile
if isfile(self.filename):
text = open(self.filename).read()
self.ui.editor_window.setText(text)
def file_save(self):
from os.path import isfile
if isfile(self.filename):
file = open(self.filename, 'w')
file.write(self.ui.editor_window.toPlainText())
file.close()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from edytor import Ui_notatnik
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_notatnik()
self.ui.setupUi(self)
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
QtCore.QObject.connect(self.ui.button_save,QtCore.SIGNAL("clicked()"), self.file_save)
def file_dialog(self):
fd = QtGui.QFileDialog(self)
self.filename = fd.getOpenFileName()
from os.path import isfile
if isfile(self.filename):
import codecs
s = codecs.open(self.filename,'r','utf-8').read()
self.ui.editor_window.setPlainText(s)
def file_save(self):
from os.path import isfile
if isfile(self.filename):
import codecs
s = codecs.open(self.filename,'w','utf-8')
s.write(unicode(self.ui.editor_window.toPlainText()))
s.close()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
Pobierz źródła
Pobierz źródła
RkBlog
Comment article