#!/usr/bin/env python ############################################################################# # %{APPNAME} - PyQT application template for KDevelop # # Translated from C++ qmakeapp.cpp # (qmakeapp.cpp - Copyright (C) 1992-2002 Trolltech AS. All rights reserved.) # # This file is part of an example program for Qt. This example # program may be used, distributed and modified without limitation. # ############################################################################# import sys import os.path from qt import * import documentdetails false = 0 true = 1 def load_QPixMap(fileName): f = open(os.path.join(sys.path[0],fileName),"r") result = QPixmap(f.readlines()) f.close() return result class %{APPNAME}(QMainWindow): """An application called %{APPNAME}.""" def __init__(self): QMainWindow.__init__(self, None, "%{APPNAME}") self.initIcons() self.setup() self.initPrinter() self.initToolBar() self.initMenu() self.initMainWidget() self.setCaption(self.appTitle) def setup(self): self.appTitle = "%{APPNAME} - PyQT Application Example" self.menu = [ ('&File', [('&New', self.slotNewFile), ('&Open...', self.slotOpenFile, self.openIcon), ('&Save', self.slotSaveFile, self.saveIcon), ('Save &as...', self.slotSaveAs), ('&Print...', self.slotPrint, self.printIcon), ('&Edit details...', self.slotEditDetails), (None,)]), ('&Help', [('&About', self.slotAbout), ('About &QT', self.slotAboutQT), (None, ), ('What\'s this', self.slotWhatsThis)]) ] self.toolbar = [ ("filetools", "file operations", "File Operations", [("fileopen", (self.openIcon, "open file", "Open File", self.slotOpenFile), "

Click this button to open a new file.
" + \ "You can also select the Open command " + \ "from the File menu.

"), ("filesave", (self.saveIcon, "save file", "Save File", self.slotSaveFile), "

Click this button to save the file you " + \ "are editing. You will be prompted for a file name.\n" + \ "You can also select the Save command " + \ "from the File menu.

"), ("fileprint", (self.printIcon, "print file", "Print File", self.slotPrint), "Click this button to print the file you " + \ "are editing.\n You can also select the Print " + \ "command from the File menu." )])] self.fileName = "" def initMainWidget(self): self.editor = QTextEdit(self, "editor") self.editor.setFocus() self.setCentralWidget(self.editor) self.statusBar().message("Ready", 2000) self.resize(450,600) def initPrinter(self): self.printer = QPrinter() def initIcons(self): self.openIcon = QIconSet( load_QPixMap("fileopen.pyxpm")) self.saveIcon = QIconSet( load_QPixMap("filesave.pyxpm")) self.printIcon = QIconSet( load_QPixMap("fileprint.pyxpm")) def initToolBar(self): self.toolbars = {} for (toolBarID, toolBarName, toolBarDescr, toolBarButtons) in self.toolbar: self.toolbars[toolBarID] = QToolBar(self, toolBarName) self.toolbars[toolBarID].setLabel(toolBarDescr) for (buttonID, (buttonIcon, buttonName, buttonText, buttonSlot), whatsThisText) in toolBarButtons: toolButton = QToolButton(buttonIcon, buttonText, "", buttonSlot, self.toolbars[toolBarID], buttonName) QWhatsThis.add( toolButton, whatsThisText ) self.whatsThisButton = QWhatsThis.whatsThisButton(self.toolbars[toolBarID]) def initMenu(self): for (menuName, subMenu) in self.menu: menu = QPopupMenu(self) self.menuBar().insertItem( menuName, menu ) for menuOption in subMenu: if len(menuOption)==1: menu.insertSeparator() elif len(menuOption)==2: menu.insertItem( menuOption[0], menuOption[1] ) elif len(menuOption)==3: menu.insertItem( menuOption[2], \ menuOption[0], \ menuOption[1] ) def slotNewFile(self): ed = %{APPNAME}() ed.setCaption(self.appTitle) ed.show() def slotOpenFile(self): fileName = str(QFileDialog.getOpenFileName("", "", self)) print fileName if not fileName=="": self.load(fileName) else: self.statusBar().message("Loading aborted", 2000) def slotSaveFile(self): if self.fileName=="": self.saveAs() return self.save() def slotSaveAs(self): pass def slotPrint(self): margin = 10 pageno = 1 if self.printer.setup(self): self.statusBar().message("Printing..."); p = QPainter() if not p.begin(self.printer): return p.setFont( self.editor.font() ) yPos = 0 fontMetrics = p.fontMetrics() metrics = QPaintDeviceMetrics(self.printer) for i in range(self.editor.lines()): if margin + yPos > metrics.height() - margin: pageNo += 1 self.statusBar().message("Printing (page " + pageNo + ")...") self.printer.newPage() yPos = 0 p.drawText( margin, margin+yPos, \ metrics.width(), \ fontMetrics.lineSpacing(), \ QPainter.ExpandTabs | QPainter.DontClip, \ self.editor.text(i) ) yPos += fontMetrics.lineSpacing() p.end() self.statusBar().message("Printing completed", 2000) else: self.statusBar().message("Printing aborted", 2000) def slotClose(self): pass def slotQuit(self): pass def slotEditDetails(self): docDet = documentdetails.documentDetails(self) docDet.show() def slotWhatsThis(self): self.whatsThis() def slotAbout(self): QMessageBox.about(self, self.appTitle, \ "This example demonstrates the simple use of\n" + \ "QMainWindow, QMenuBar and QToolBar using QT\n" + \ "and Python.") def slotAboutQT(self): QMessageBox.aboutQt(self, self.appTitle) def load(self,fileName): f = open(fileName,"r") if f: self.editor.setText( f.read() ) self.editor.setModified(false) self.setCaption(fileName) self.statusBar().message("Loaded document " + fileName, 2000) self.fileName = fileName else: self.statusBar().message("Could not load " + fileName, 5000) return def saveAs(self): fileName = str(QFileDialog.getSaveFileName(None, None, self)) if fileName!="": self.fileName = fileName self.save() else: self.statusBar().message("Saving aborted", 2000) def save(self): if self.fileName=="": self.saveAs() return text = str(self.editor.text()) try: f = open(self.fileName, "w") f.write(text) except: self.statusBar().message("Could not write to " + self.fileName) f.close() return f.close() self.editor.setModified(false) self.setCaption(self.fileName) self.statusBar().message( "File " + self.fileName + " saved", 2000) def closeEvent(self, closeEvent): if not self.editor.isModified(): closeEvent.accept() return yesNoCancel = QMessageBox.information(self, self.appTitle, "Do you want to save the changes\n" + \ "to the document?", \ "Yes", "No", "Cancel", 0, 1) if yesNoCancel == 0: self.save() closeEvent.accept() elif yesNoCancel == 1: closeEvent.accept() else: closeEvent.ignore() def main(args): app=QApplication(args) mainWindow = %{APPNAME}() mainWindow.show() app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) app.exec_loop() if __name__ == "__main__": main(sys.argv)