Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- @name: qt-textedit.py
- @summary: A sample text editor using PyQt4
- @author: Alvin Delagon
- """
- import sys
- from PyQt4 import QtGui, QtCore
- def PutToCenter(widget):
- """
- I'm a helper function that move a widget to the
- center of the screen
- @param: QtGui.QWidget
- @return: None
- """
- screen = QtGui.QDesktopWidget().availableGeometry()
- size = widget.geometry()
- widget.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
- def Maximize(widget):
- """
- I'm a helper function that can set the widget's size
- to maximum screen size
- @param: QtGui.QWidget
- @return: None
- """
- widget.showMaximized()
- class TextEditor(QtGui.QMainWindow):
- def __init__(self, parent=None):
- self.filename = "untitled.txt"
- self.modified = False
- self.saved = False
- QtGui.QMainWindow.__init__(self)
- self.setWindowTitle ("Text Editor 1.0.0 - %s" % (self.filename))
- self.textedit = QtGui.QTextEdit()
- self.setCentralWidget(self.textedit)
- self.connect(self.textedit, QtCore.SIGNAL('textChanged()'), self.onTextChanged)
- self.buildMenuBar()
- self.buildAboutBox()
- Maximize(self)
- def buildMenuBar(self):
- """
- Build, Populate, and set Signals for the Menu bar
- @param: self
- @return: None
- """
- open = QtGui.QAction('&Open', self)
- new = QtGui.QAction('&New', self)
- save = QtGui.QAction('&Save', self)
- saveas = QtGui.QAction('Save As', self)
- exit = QtGui.QAction('E&xit', self)
- credits = QtGui.QAction('Credits', self)
- self.menu = self.menuBar()
- file = self.menu.addMenu('&File')
- file.addAction(open)
- file.addAction(new)
- file.addAction(save)
- file.addAction(saveas)
- file.addAction(exit)
- about = self.menu.addMenu('&About')
- about.addAction(credits)
- self.connect(open, QtCore.SIGNAL('triggered()'), self.onOpen)
- self.connect(new, QtCore.SIGNAL('triggered()'), self.onNew)
- self.connect(save, QtCore.SIGNAL('triggered()'), self.onSave)
- self.connect(saveas, QtCore.SIGNAL('triggered()'), self.onSaveAs)
- self.connect(exit, QtCore.SIGNAL('triggered()'), self.onExit)
- self.connect(credits, QtCore.SIGNAL('triggered()'), self.onCredits)
- def buildAboutBox(self):
- """
- Build the AboutBox
- @param: self
- @return: None
- """
- self.credits_window = QtGui.QWidget()
- self.credits_window.setGeometry(100, 50, 250, 150)
- self.credits_window.setWindowTitle("About")
- PutToCenter(self.credits_window)
- def onTextChanged(self):
- """
- Trigger for the textchanged() signal. My job is to detect if the
- buffer has been modified
- @param: self
- @return: None
- """
- self.modified = True
- self.setWindowTitle("Text Editor 1.0.0 - %s [modified]" % (self.filename))
- def onOpen(self):
- """
- I'm the trigger for the Menu-Open signal. Reads
- the chosen file and loads it to textedit widget
- @param: self
- @return: None
- """
- v = self.checkUnsaved("Warning!")
- if v == "cancel":
- return
- self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
- file = open(self.filename)
- self.textedit.setText(file.read())
- self.setWindowTitle("Text Editor 1.0.0 - %s" % (self.filename))
- self.saved = True
- self.modified = False
- def onNew(self):
- """
- I'm the trigger for the Menu-New signal. Clears
- the textedit widget
- @param: self
- @return: None
- """
- v = self.checkUnsaved("Warning!")
- if v == "cancel":
- return
- self.saved = False
- self.modified = False
- self.filename = "untitled.txt"
- self.textedit.setText("")
- self.setWindowTitle("Text Editor 1.0.0 - %s" % (self.filename))
- def onSave(self):
- """
- I'm the trigger for the Menu-Save signal. Saves
- the textedit contents to the chosen filename
- @param: self
- @return: None
- """
- if self.saved == False:
- self.filename = QtGui.QFileDialog.getSaveFileName(self, 'Save As')
- if len(self.filename) == 0:
- return
- file = open(self.filename, 'w')
- file.write(self.textedit.toPlainText())
- file.close()
- self.modified = False
- self.saved = True
- self.setWindowTitle("Text Editor 1.0.0 - %s" % (self.filename))
- def onSaveAs(self):
- """
- I'm the trigger for the Menu-SaveAs signal. Saves the
- buffer in a different file
- @param: self
- @returns: None
- """
- self.filename = QtGui.QFileDialog.getSaveFileName(self, 'Save As')
- file = open(self.filename, 'w')
- file.write(self.textedit.toPlainText())
- file.close()
- self.modified = False
- self.saved = True
- self.setWindowTitle("Text Editor 1.0.0 - %s" % (self.filename))
- def onExit(self):
- """
- I'm the trigger for the Menu-Exit signal. Triggers
- application close
- @param: self
- @returns: None
- """
- v = self.checkUnsaved("Really Quit?")
- if v == "cancel":
- return
- self.close()
- def onCredits(self):
- """
- I'm the triggers for the Menu-Credits signal. Shows
- the About Window
- """
- self.credits_window.show()
- def checkUnsaved(self, title):
- """
- Checks if the buffer has been modified and unsaved.
- @param: title (String)
- @return: String
- """
- v = ""
- if self.modified and not(len(self.textedit.toPlainText()) == 0):
- reply = QtGui.QMessageBox.question(self,
- title,
- "You have some unsaved work!",
- QtGui.QMessageBox.Cancel,
- QtGui.QMessageBox.Save,
- QtGui.QMessageBox.Discard)
- if reply == QtGui.QMessageBox.Cancel:
- return ("cancel")
- elif reply == QtGui.QMessageBox.Save:
- self.onSave()
- return ("save")
- else:
- return ("discard")
- return (v)
- app = QtGui.QApplication(sys.argv)
- qts = TextEditor()
- qts.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement