Hi, I followed the guide in QGIS Book [1] (pages 161-167), "Creating PyQGIS Applications" and I somehow did not get the desired result.
I get only one "empty" window, but no qgis-based application. Could anyone point me to the bug, I probably did? Files attached. I'm running it as follows: Qgis (1.1.0), installed from debian package (custom compilation) in the system the standard way. export QGISHOME=/usr/ export PYTHONPATH=/usr/share/qgis/python/ python demo_app.py Thanks Jachym [1] http://download.osgeo.org/qgis/doc/manual/qgis-1.0.0_user_guide_en.pdf -- Jachym Cepicky e-mail: jachym.cepicky gmail com URL: http://les-ejk.cz GPG: http://www.les-ejk.cz/pgp/JachymCepicky.pgp Key fingerprint: 0C6D 0EAE 76BD 506C F299 ED8A C8AB 74B8 08D4 E08F
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Sun Mar 29 11:59:59 2009
# by: PyQt4 UI code generator 4.4.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtGui.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.frame = QtGui.QFrame(self.centralwidget)
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName("frame")
self.gridLayout.addWidget(self.frame, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
<ui version="4.0" >
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle" >
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget" >
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QFrame" name="frame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar" />
</widget>
<resources/>
<connections/>
</ui>
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import sys
import os
# Import gui
from mainwindow_ui import Ui_MainWindow
qgis_prefix = os.getenv("QGISHOME")
class MainWindow(QMainWindow, Ui_MainWindow):
def __init_(self):
QMainWindow.__init__(self)
# required by Qt4 to initialize the UI
self.setupUi(self)
# set the title for the app
self.setWindowTitle("QGIS Demo App")
# Create the map canvas
self.canvas = QgsMapCanvas()
# set the background clor to light blue
self.canvas.setCanvasColor(QColor(200,200,255))
self.canvas.enableAntiAliasing(True)
self.canvas.useQImageToRender(False)
self.canvas.show()
# lay our widets out in the main window usin ga vertical box layout
self.layout = QVBoxLayout(self.frame)
self.layout.addWidget(self.canvas)
# create the actions for our tools and connect eacy to appropriate
# method
# add layer
self.actionAddLayer = QAction(QIcon(qgis_prefix +
"/share/qgis/themes/classic/mActionAddLayer.png"), "Add Layer",
self.frame)
self.connect(self.actionAddLayer,SIGNAL("activated()"),self.addLayer)
# zoom in
self.actionZoomIn = QAction(QIcon(qgis_prefix+
"/share/qgis/themes/classic/mActionZoomIn.png"), "Zoom In",self.frame)
self.connect(self.actionZoomIn,SIGNAL("activated()"),self.zoomIn)
# zoom out
self.actionZoomOut = QAction(QIcon(qgis_prefix+
"/share/qgis/themes/classic/mActionZoomOut.png"), "Zoom In",self.frame)
self.connect(self.actionZoomOut,SIGNAL("activated()"),self.zoomOut)
# zoom pan
self.actionZoomPan = QAction(QIcon(qgis_prefix+
"/share/qgis/themes/classic/mActionZoomPan.png"), "Pan",self.frame)
self.connect(self.actionZoomPan,SIGNAL("activated()"),self.zoomPan)
# zoom Full
self.actionZoomFull = QAction(QIcon(qgis_prefix+
"/share/qgis/themes/classic/mActionZoomFull.png"), "Zoom Full",self.frame)
self.connect(self.actionZoomFull,SIGNAL("activated()"),self.zoomFull)
# create the toolbar
self.toolbar = self.addToolBar("Map")
# actions
self.toolbar.addAction(self.actionAddLayer)
self.toolbar.addAction(self.actionZoomIn)
self.toolbar.addAction(self.actionZoomOut)
self.toolbar.addAction(self.actionZoomPan)
self.toolbar.addAction(self.actionZoomFull)
# create the map tools
self.toolPan = QgsMapToolPan(self.canvas)
self.toolZoomIn = QgsMapToolPan(self.canvas,False)
self.toolZoomOut = QgsMapToolPan(self.canvas,True)
def zoomIn(self):
self.canvas.setMapTool(self.toolZoomIn)
def zoomOut(self):
self.canvas.setMapTool(self.toolZoomOut)
def zoomPan(self):
self.canvas.setMapTool(self.toolPan)
def zoomFull(self):
self.canvas.zoomFullExtent()
def addLayer(self):
file = QFileDialog.getOpenFileName(self,"Open Shapefile",".","Shapfiles (*.shp)")
fileInfo = QFileInfo(file)
# addlayer
layer = QgsVectorLayer(file,fileInfo.fileName(),"ogr")
if not layer.isValid():
return
# change the color of the layer to gray
symbols = layer.renderer().symbols()
symbol = symbols[0]
symbol.setFillColor(QColor.fromRgb(192,192,192))
# add layer
QgsMapLayerRegistry.instance().adMapLayer(layer)
# set extent
self.canvas.setExtent(layer.extent())
# set map canvas layer
cl = QgsMapCanvasLayer(layer)
layers = [cl]
self.canvas.setLayerSet(layers)
def main(argv):
app = QApplication(argv)
# init qgis libraris
QgsApplication.setPrefixPath(qgis_prefix,True)
QgsApplication.initQgis()
# main window
wnd = MainWindow()
wnd.move(100,100)
wnd.show()
# run!
retval = app.exec_()
# exit
QgsApplication.exitQgis()
sys.exit(retval)
if __name__ == "__main__":
main(sys.argv)
signature.asc
Description: Digital signature
_______________________________________________ Qgis-user mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-user
