[Qgis-developer] PyQGIS App's Main Window doesnt show up

ameet chaudhari ameet2k99 at yahoo.com
Tue Sep 21 07:49:27 EDT 2010


I created a simple PyQGIS App as follows 
1. Created a form in Qt designer (mainwindow.ui)
2. Converted it to python script using pyuic4 (mainwindow_ui.py)
3. Coded main logic in mainwindow_control.py that should show a QgsMapCanvas
When I run my app, (python mainwindow_control.py), Nothing is displayed... All the paths are set. No import errors. Infact, a compiled (mainwindow_ui.pyc) file is also generated, but nothing shows up.
[Using QGIS 1.5 and all the python and Qt stuff that comes with it. OS: Wndows 7]Can anyone tell why the Qt Frame containing QgsMapCanvas is not displayed. What are the common causes for such problem?
Below is the code for mainwindow_control.py:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import sys
import os
# Import our GUI
from mainwindow_ui import Ui_MainWindow
# Environment variable QGISHOME must be set to the 1.x install directory
# before running this application
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("Map Canvas - By Ameet Chaudhari")

        # Create the map canvas
        self.canvas = QgsMapCanvas()

        # Set the background color to light blue something
        self.canvas.setCanvasColor(QColor(200,200,255))
        self.canvas.enableAntiAliasing(True)
        self.canvas.useQImageToRender(False)
        self.canvas.show()

        # Lay our widgets out in the main window using a
        # vertical box layout
        self.layout = QVBoxLayout(self.frame)
        self.layout.addWidget(self.canvas)

        # Create the actions for our tools and connect each to the appropriate
        # method
        self.actionAddLayer = QAction(QIcon("resources\mActionAddlayer.png"),"Add Layer",self.frame)
        self.connect(self.actionAddLayer, SIGNAL("activated()"), self.addLayer)

        self.actionZoomIn = QAction(QIcon("resources\mActionZoomIn.png"),"Zoom In",self.frame)
        self.connect(self.actionZoomIn, SIGNAL("activated()"), self.zoomIn)

        self.actionZoomOut = QAction(QIcon("resources\mActionZoomOut.png"),"Zoom Out",self.frame)
        self.connect(self.actionZoomOut, SIGNAL("activated()"), self.zoomOut)

        self.actionPan = QAction(QIcon("resources\mActionPan.png"),"Pan",self.frame)
        self.connect(self.actionPan, SIGNAL("activated()"), self.pan)

        self.actionZoomFull = QAction(QIcon("resources\mActionZoomFullExtent.png"),"Zoom Full Extent",self.frame)
        self.connect(self.actionZoomFull, SIGNAL("activated()"), self.zoomFull)

        # Create a toolbar
        self.toolbar  = self.addToolBar("Map")
        # Add the actions to the toolbar
        self.toolbar.addAction(self.actionAddLayer)
        self.toolbar.addAction(self.actionZoomIn)
        self.toolbar.addAction(self.actionZoomOut)
        self.toolbar.addAction(self.actionPan)
        self.toolbar.addAction(self.actionZoomFull)

        # Create the map tools
        self.toolPan = QgsMapToolPan(self.canvas)
        self.toolZoomIn = QgsMapToolZoom(self.canvas, False) # false = in
        self.toolZoomOut = QgsMapToolZoom(self.canvas, True) # true = out

    # Set the map tool to zoom in
    def zoomIn(self):
        self.canvas.setMapTool(self.toolZoomIn)

    # Set the map tool to zoom out
    def zoomOut(self):
        self.canvas.setMapTool(self.toolZoomOut)

    # Set the map tool to
    def pan(self):
        self.canvas.setMapTool(self.toolPan)

    # Zoom to full extent of layer
    def zoomFull(self):
        self.canvas.zoomFullExtent()

    # Add an OGR layer to the map
    def addLayer(self):
        file = QFileDialog.getOpenFileName(self, "Open Shapefile", ".", "Shapefiles(*.shp)")
        fileInfo = QFileInfo(file)

        # Add the layer
        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 to the registry
        QgsMapLayerRegistry.instance().addMapLayer(layer);

        # Set extent to the extent of our layer
        #self.canvas.setExtent(layer.extent())

        # Set up the map canvas layer set
        cl = QgsMapCanvasLayer(layer)
        layers = [cl]
        self.canvas.setLayerSet(layers)

    def main(argv):
        # create Qt application
        app = QApplication(argv)

        # Initialize qgis libraries
        QgsApplication.setPrefixPath(qgis_prefix, True)
        QgsApplication.initQgis()

        # create main window
        wnd = MainWindow()
        # Move the app window to upper left
        wnd.move(100,100)
        wnd.show()

        # run!
        retval = app.exec_()
        # exit
        QgsApplication.exitQgis()
        sys.exit(retval)

        if __name__ == "__main__":
            main(sys.argv)
Thanks in advanceRegards,Ameet



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/qgis-developer/attachments/20100921/4d9aed63/attachment-0001.html


More information about the Qgis-developer mailing list