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)

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Qgis-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to