summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples3/application.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/examples3/application.py')
-rwxr-xr-xpython/pyqt/examples3/application.py277
1 files changed, 277 insertions, 0 deletions
diff --git a/python/pyqt/examples3/application.py b/python/pyqt/examples3/application.py
new file mode 100755
index 00000000..f5c027db
--- /dev/null
+++ b/python/pyqt/examples3/application.py
@@ -0,0 +1,277 @@
+#!/usr/bin/env python
+
+# A simple application.
+
+
+import sys, string
+from qt import *
+
+
+fileopen = [
+ '16 13 5 1',
+ '. c #040404',
+ '# c #808304',
+ 'a c None',
+ 'b c #f3f704',
+ 'c c #f3f7f3',
+ 'aaaaaaaaa...aaaa',
+ 'aaaaaaaa.aaa.a.a',
+ 'aaaaaaaaaaaaa..a',
+ 'a...aaaaaaaa...a',
+ '.bcb.......aaaaa',
+ '.cbcbcbcbc.aaaaa',
+ '.bcbcbcbcb.aaaaa',
+ '.cbcb...........',
+ '.bcb.#########.a',
+ '.cb.#########.aa',
+ '.b.#########.aaa',
+ '..#########.aaaa',
+ '...........aaaaa'
+]
+
+filesave = [
+ '14 14 4 1',
+ '. c #040404',
+ '# c #808304',
+ 'a c #bfc2bf',
+ 'b c None',
+ '..............',
+ '.#.aaaaaaaa.a.',
+ '.#.aaaaaaaa...',
+ '.#.aaaaaaaa.#.',
+ '.#.aaaaaaaa.#.',
+ '.#.aaaaaaaa.#.',
+ '.#.aaaaaaaa.#.',
+ '.##........##.',
+ '.############.',
+ '.##.........#.',
+ '.##......aa.#.',
+ '.##......aa.#.',
+ '.##......aa.#.',
+ 'b.............'
+]
+
+fileprint = [
+ '16 14 6 1',
+ '. c #000000',
+ '# c #848284',
+ 'a c #c6c3c6',
+ 'b c #ffff00',
+ 'c c #ffffff',
+ 'd c None',
+ 'ddddd.........dd',
+ 'dddd.cccccccc.dd',
+ 'dddd.c.....c.ddd',
+ 'ddd.cccccccc.ddd',
+ 'ddd.c.....c....d',
+ 'dd.cccccccc.a.a.',
+ 'd..........a.a..',
+ '.aaaaaaaaaa.a.a.',
+ '.............aa.',
+ '.aaaaaa###aa.a.d',
+ '.aaaaaabbbaa...d',
+ '.............a.d',
+ 'd.aaaaaaaaa.a.dd',
+ 'dd...........ddd'
+]
+
+
+fileOpenText = \
+'''<img source="fileopen">
+Click this button to open a <em>new file</em>.<br><br>
+You can also select the <b>Open</b> command from the <b>File</b> menu.'''
+
+fileSaveText = \
+'''Click this button to save the file you are editing.<br><br>
+You will be prompted for a filename.<br><br>
+You can also select the <b>Save</b> command from the <b>File</b> menu.'''
+
+filePrintText = \
+'''Click this button to print the file you are editing.<br><br>
+You can also select the <b>Print</b> command from the <b>File</b> menu.'''
+
+
+editorList = []
+
+
+class ApplicationWindow(QMainWindow):
+ def __init__(self):
+ QMainWindow.__init__(self,None,'example application main window',Qt.WDestructiveClose)
+
+ self.filename = QString.null
+ self.printer = QPrinter()
+
+ self.fileTools = QToolBar(self,'file operations')
+
+ openIcon = QPixmap(fileopen)
+ self.fileOpen = QToolButton(QIconSet(openIcon),'Open File',QString.null,self.load,self.fileTools,'open file')
+
+ saveIcon = QPixmap(filesave)
+ self.fileSave = QToolButton(QIconSet(saveIcon),'Save File',QString.null,self.save,self.fileTools,'save file')
+
+ printIcon = QPixmap(fileprint)
+ self.filePrint = QToolButton(QIconSet(printIcon),'Print File',QString.null,self.printDoc,self.fileTools,'print file')
+
+ QWhatsThis.whatsThisButton(self.fileTools)
+
+ QWhatsThis.add(self.fileOpen,fileOpenText)
+ QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon)
+ QWhatsThis.add(self.fileSave,fileSaveText)
+ QWhatsThis.add(self.filePrint,filePrintText)
+
+ self.file = QPopupMenu(self)
+ self.menuBar().insertItem('&File',self.file)
+
+ self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N)
+
+ id = self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL + Qt.Key_O)
+ self.file.setWhatsThis(id,fileOpenText)
+
+ id = self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL + Qt.Key_S)
+ self.file.setWhatsThis(id,fileSaveText)
+
+ id = self.file.insertItem('Save &as',self.saveAs)
+ self.file.setWhatsThis(id,fileSaveText)
+
+ self.file.insertSeparator()
+
+ id = self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL + Qt.Key_P)
+ self.file.setWhatsThis(id,filePrintText)
+
+ self.file.insertSeparator()
+
+ self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL + Qt.Key_W)
+ self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL + Qt.Key_Q)
+
+ self.help = QPopupMenu(self)
+ self.menuBar().insertSeparator()
+ self.menuBar().insertItem('&Help',self.help)
+
+ self.help.insertItem('&About',self.about,Qt.Key_F1)
+ self.help.insertItem('About &Qt',self.aboutQt)
+
+ self.e = QMultiLineEdit(self,'editor')
+ self.e.setFocus()
+ self.setCentralWidget(self.e)
+
+ self.statusBar().message('Ready',2000)
+ self.resize(450,600)
+
+ def newDoc(self):
+ ed = ApplicationWindow()
+ ed.show()
+ editorList.append(ed)
+
+ def load(self):
+ fn = QFileDialog.getOpenFileName(QString.null,QString.null,self)
+ if fn.isEmpty():
+ self.statusBar().message('Loading aborted',2000)
+ return
+
+ fileName = str(fn)
+
+ self.e.setAutoUpdate(0)
+ self.e.clear()
+
+ try:
+ f = open(fileName,'r')
+ except:
+ return
+
+ for l in f.readlines():
+ self.e.append(string.rstrip(l))
+
+ f.close()
+
+ self.e.setAutoUpdate(1)
+ self.e.repaint()
+ self.e.setEdited(0)
+ self.setCaption(fileName)
+ self.statusBar().message('Loaded document %s' % (fileName),2000)
+
+ def save(self):
+ if self.filename.isEmpty():
+ self.saveAs()
+ return
+
+ try:
+ f = open(str(self.filename),'w+')
+ except:
+ self.statusBar().message('Could not write to %s' % (self.filename),2000)
+ return
+
+ f.write(str(self.e.text()))
+ f.close()
+
+ self.e.setEdited(0)
+ self.setCaption(self.filename)
+ self.statusBar().message('File %s saved' % (self.filename),2000)
+
+ def saveAs(self):
+ fn = QFileDialog.getSaveFileName(QString.null,QString.null,self)
+ if not fn.isEmpty():
+ self.filename = fn
+ self.save()
+ else:
+ self.statusBar().message('Saving aborted',2000)
+
+ def printDoc(self):
+ Margin = 10
+ pageNo = 1
+
+ if self.printer.setup(self):
+ self.statusBar().message('Printing...')
+
+ p = QPainter()
+ p.begin(self.printer)
+ p.setFont(self.e.font())
+ yPos = 0
+ fm = p.fontMetrics()
+ metrics = QPaintDeviceMetrics(self.printer)
+
+ for i in range(self.e.numLines):
+ if Margin + yPos > metrics.height() - Margin:
+ pageNo = pageNo + 1
+ self.statusBar().message('Printing (page %d)...' % (pageNo))
+ self.printer.newPage()
+ yPos = 0
+
+ p.drawText(Margin,Margin + yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs | Qt.DontClip,self.e.textLine(i))
+ yPos = yPos + fm.lineSpacing()
+
+ p.end()
+ self.statusBar().message('Printing completed',2000)
+ else:
+ self.statusBar().message('Printing aborted',2000)
+
+ def closeEvent(self,ce):
+ if not self.e.edited():
+ ce.accept()
+ return
+
+ rc = QMessageBox.information(self,'Qt Application Example',
+ 'The document has been changed since the last save.',
+ 'Save Now','Cancel','Leave Anyway',0,1)
+
+ if rc == 0:
+ self.save()
+ ce.accept()
+ elif rc == 2:
+ ce.accept()
+ else:
+ ce.ignore()
+
+ def about(self):
+ QMessageBox.about(self,'Qt Application Example',
+ 'This example demonstrates simple use of QMainWindow,\nQMenuBar and QToolBar.')
+
+ def aboutQt(self):
+ QMessageBox.aboutQt(self,'Qt Application Example')
+
+
+a = QApplication(sys.argv)
+mw = ApplicationWindow()
+mw.setCaption('Document 1')
+mw.show()
+a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()'))
+a.exec_loop()