Виджет для отображения координат
Добавлено: 10 фев 2012, 18:26
Помогите разобраться с созданием виджета для отображения коодинат
как это происходит в QGIS
как это происходит в QGIS
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
Код: Выделить всё
self.connect( mCanvas, SIGNAL( "xyCoordinates( QgsPoint )" ), self.showCoords )
Код: Выделить всё
def showCoords( self, p ):
print p.x(), p.y()
Код: Выделить всё
self.connect( mCanvas, SIGNAL( "xyCoordinates( QgsPoint )" ), self.showCoords )
Код: Выделить всё
def showCoords( self, p ):
print p.x(), p.y()
File "mainwindow.py", line 59
self.connect( mCanvas, SIGNAL( "xyCoordinates( QgsPoint )" ), self.showCoords )
^
IndentationError: unexpected indent
Код: Выделить всё
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import sys, os
# импорт виджета списка слоёв
from legend import Legend
# Мое окно
# Импорт созданного интерфейса
from mainwindow_ui import Ui_MainWindow
# Считываем значение переменной окружения QGISHOME, которая должна указывать на каталог с
# установленным QGIS.
qgis_prefix = os.getenv( "QGISHOME" )
class MainWindow( QMainWindow, Ui_MainWindow ):
def __init__( self ):
QMainWindow.__init__( self )
# Требуется Qt4 для инициализации пользовательского интерфейса
self.setupUi( self )
# Устанавливаем заголовок окна
self.setWindowTitle( "GIS DIPLOM" )
# Создаем карту
self.canvas = QgsMapCanvas()
# Задаем цвет фона карты
self.canvas.setCanvasColor( QColor( 200, 200, 255 ) )
self.canvas.enableAntiAliasing( True )
self.canvas.show()
# Размещаем виджеты в окне
self.layout = QVBoxLayout( self.frame )
self.layout.addWidget( self.canvas )
# Создаём и инициализируем легенду
self.createLegendWidget()
# Задаем действия для каждого из инструментов и соединяем их с соответсвующими методами
self.connect( self.mpActionAddLayer, SIGNAL( "triggered()" ), self.addLayer );
self.connect( self.mpActionZoomIn, SIGNAL( "triggered()" ), self.zoomIn );
self.connect( self.mpActionZoomOut, SIGNAL( "triggered()" ), self.zoomOut );
self.connect( self.mpActionPan, SIGNAL( "triggered()" ), self.pan );
self.connect( self.mpActionZoomFullExtent, SIGNAL( "triggered()" ), self.zoomFull );
self.connect( mCanvas, SIGNAL( "xyCoordinates( QgsPoint )" ), self.showCoords )
# Создаем панель инструментов
self.toolbar = self.addToolBar( "Map" );
# Добавляем действия на панель инструментов
self.toolbar.addAction( self.mpActionAddLayer );
self.toolbar.addAction( self.mpActionZoomIn );
self.toolbar.addAction( self.mpActionZoomOut );
self.toolbar.addAction( self.mpActionPan );
self.toolbar.addAction( self.mpActionZoomFullExtent );
# Создаем инструменты карты
self.toolPan = QgsMapToolPan( self.canvas )
self.toolPan.setAction( self.mpActionPan )
self.toolZoomIn = QgsMapToolZoom( self.canvas, False ) # false = уменьшить
self.toolZoomIn.setAction( self.mpActionZoomIn )
self.toolZoomOut = QgsMapToolZoom( self.canvas, True ) # true = увеличить
self.toolZoomOut.setAction( self.mpActionZoomOut )
def createLegendWidget( self ):
self.legend = Legend( self )
self.legend.setCanvas( self.canvas )
self.legend.setObjectName( "theMapLegend" )
self.LegendDock = QDockWidget( "Layers", self )
self.LegendDock.setObjectName( "legend" )
self.LegendDock.setAllowedAreas( Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea )
self.LegendDock.setWidget( self.legend )
self.LegendDock.setContentsMargins ( 9, 9, 9, 9 )
self.addDockWidget( Qt.LeftDockWidgetArea, self.LegendDock )
# Установить инструмент увеличения
def zoomIn( self ):
self.canvas.setMapTool( self.toolZoomIn )
# Установить инструмент уменьшения
def zoomOut( self ):
self.canvas.setMapTool( self.toolZoomOut )
# Установить инструмент для перемещения
def pan( self ):
self.canvas.setMapTool( self.toolPan )
# Установить инструмент показа карты полностью
def zoomFull( self ):
self.canvas.zoomToFullExtent()
# Добавить OGR-слой
def addLayer( self ):
filtering = QString( "Shapefiles (*.shp)" )
encode = QString( "System" )
fileDialog = QgsEncodingFileDialog( self, "Open shapefile", ".", QString( filtering ), encode )
fileDialog.setFileMode( QFileDialog.ExistingFiles )
fileDialog.setAcceptMode( QFileDialog.AcceptOpen )
if not fileDialog.exec_() == QDialog.Accepted:
return
files = fileDialog.selectedFiles()
for f in files:
layerPath = unicode( f )
layer = QgsVectorLayer( layerPath, QFileInfo( layerPath ).baseName(), "ogr" )
if not layer.isValid():
print "Layer is not valid" % layerPath
continue
QgsMapLayerRegistry.instance().addMapLayer( layer )
self.canvas.zoomToFullExtent()
def showCoords( self, p ):
print p.x(), p.y()
def main( app ):
# Инициализация библиотек QGIS
QgsApplication.setPrefixPath( qgis_prefix, True )
QgsApplication.initQgis()
# Создание приложения
wnd = MainWindow()
wnd.show()
# Запуск!
retval = app.exec_()
# Выход
QgsApplication.exitQgis()
sys.exit( retval )
if __name__ == "__main__":
# Создать приложение Qt
app = QApplication( sys.argv )
main( app )
Traceback (most recent call last):
File "mainwindow.py", line 27, in <module>
class MainWindow( QMainWindow, Ui_MainWindow ):
File "mainwindow.py", line 159, in MainWindow
main( app )
File "mainwindow.py", line 143, in main
wnd = MainWindow()
NameError: global name 'MainWindow' is not defined
Код: Выделить всё
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'win.ui'
#
# Created: Fri Feb 10 09:23:52 2012
# by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Win(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(465, 139)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 201, 41))
self.label.setObjectName(_fromUtf8("label"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(170, 70, 75, 23))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(220, 20, 221, 21))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 465, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("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))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Введите МАС адрес маршрутизатора", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Найти", None, QtGui.QApplication.UnicodeUTF8))
Код: Выделить всё
self.connect( self.mpActionMAC, SIGNAL( "triggered()" ), self.win);
Код: Выделить всё
def win ( self) :
print("Here open WIN")
self.child = Ui_Win()
self.child.setWindowTitle('MAC ADRESS')
self.child.show()
Код: Выделить всё
def win( self ):
print( "Here open WIN" )
self.child = QDialog()
ui = Ui_Win()
ui.setupUi( self.child )
self.child.setWindowTitle( 'MAC ADRESS' )
self.child.exec_()
Here open WIN
Traceback (most recent call last):
File "mainwindow.py", line 94, in win
ui.setupUi( self.child )
File "C:\OSGeo4W\qgis-legend\win_ui.py", line 32, in setupUi
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'QDialog' object has no attribute 'setCentralWidget'
Код: Выделить всё
def win ( self) :
print( "Here open WIN" )
self.child = QMainWindow()
ui = Ui_Win()
ui.setupUi( self.child )
self.child.setWindowTitle( 'MAC ADRESS' )
self.child.show()