[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