zoukankan      html  css  js  c++  java
  • pyqgis学习

    1.
    错误:ImportError: No module named qgis.core
    解决方法:python的qgis,初始化变量:
    D:PROGRA~1QGIS3~1.0OSGeo4W.bat
    D:PROGRA~1QGIS3~1.0inpy3_env.bat
    D:PROGRA~1QGIS3~1.0inqt5_env.bat
    SET PYTHONPATH=D:PROGRA~1QGIS3~1.0appsqgispython;D:PROGRA~1QGIS3~1.0appsQt5plugins
    SET PATH=D:PROGRA~1QGIS3~1.0appsQt5plugins;%PATH%

    2.
    错误:This application failed to start because it could not find or load the Qt platform plugin "windows"
    in "".
    解决方法:把 包含qwindows.dll的目录platform复制到 D:Program FilesQGIS 3.0in

    3.
    错误:QgisProject.read和QgisVectorLayer构造失败
    解决方法:
    环境变量没有设定好,在qgis.bat基础上去掉启动qgis,增加环境变量PYTHONPATH

    4.
    错误:QtCore.pyqtSignal信号发射接收问题解决
    解决方法:
    1.QtCore.pyqtSignal必须声明为类的变量
    2.所在类必须继承与QtObject
    3.构造函数必须直接调用QtCore.QObject.__init__(self)

    5.
    错误:在qtthread中启动httpserver崩溃的问题
    解决方法:
    1.原因python的httpserver模块默认打印到控制台,会导致qgis应为同步问题崩溃
    2.重载BaseHTTPRequestHandler的log_message方法,去掉打印

    5.
    多线程使用HTTPServer服务,并和主线程通讯的例子

    from http.server import BaseHTTPRequestHandler
    from http.server import HTTPServer
    from PyQt5 import QtCore
    import time
    
    class MyHttpServer(HTTPServer):
        def log_message(self, format, *args):
            pass
    
    class TodoHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path != '/':
                self.send_error(404, "File not found.")
                return
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(b"{}")
    
            self.server.request_.emit( 5.0, 5.0 )
     
        def log_message(self, format, *args):
            pass
    
    class TestRun(QtCore.QObject):
    
        request_ = QtCore.pyqtSignal(float, float)
    
        def __init__(self):
            QtCore.QObject.__init__(self)
    
        def run(self):
            #for i in range(0,100):
            #    time.sleep(0.1)
            #    print(i)
            #print('-- server running --')
            server = MyHttpServer(('localhost', 8888), TodoHandler)
            server.request_ = self.request_
            server.serve_forever()
    
    class TestRev(QtCore.QObject):
        def __init__(self):
            QtCore.QObject.__init__(self)
    
        def onRequest(self, x, y):
            ext = iface.mapCanvas().extent()
            ext += QgsVector(int(x),int(y))
            iface.mapCanvas().setExtent(ext)
    
        def onError(self, e, exception_string):
            print('Worker thread raised an exception:
    '.format(exception_string))
        
    a = TestRev()
    
    r = TestRun()
    t = QtCore.QThread()
    r.moveToThread(t)
    r.request_.connect(a.onRequest)
    t.started.connect(r.run)
    t.start()





  • 相关阅读:
    《Unix/Linux系统编程》第十二章学习笔记
    《Unix/Linux系统编程》第十四章学习笔记
    实验三电子公文传输系统1个人贡献
    js模版引擎(基于html模版和json数据的javascript交互)(第一讲)
    asp.net之反射
    JQuery 插件之Ajax Autocomplete(ajax自动完成)
    js模版引擎(基于html模版和json数据的javascript交互)(第二讲)完结篇
    在Sharepoint项目中究竟应该做哪类的开发?
    MVP Open day随想
    从瘦客户端到RIA
  • 原文地址:https://www.cnblogs.com/adgnat/p/9025049.html
Copyright © 2011-2022 走看看