QWebEngineView和folium

请问我在使用QWebEngineView和folium去将经纬度信息可视化,在我的电脑上不管是在pycharm还是使用pyinstaller打包后都可以正常显示,但是在其他电脑上运行打包后的exe都只显示Make this Notebook Trusted to load map : File -> Trust Notebook

        self.view = QWebEngineView(self.dingwei1)
        layout = QVBoxLayout()
        layout.addWidget(self.view)
        self.dingwei1.setLayout(layout)
        # 创建地图HTML代码
        # html = self.create_map(latitude, longitude)
        # 将地图HTML代码加载到QtWebEngineView窗口中
        # self.view.setHtml(html)
        self.updata_location()
        self.view.show()

        # 更新地图窗口
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.updata_location)
        self.timer.start(10000)  # 10秒

        # 更新数据(定时运行chuanganqi以更新数据信息)
        self.timer1 = QTimer(self)
        self.timer1.timeout.connect(self.up_chuanganqi)
        self.timer1.start(20000)

        self.timer2 = QTimer(self)
        self.timer2.timeout.connect(self.update_label)
        self.timer2.start(15000)

    def updata_location(self):
        # self.latitude = 35.2807317
        # self.longitude = 113.9268551
        global latitude
        latitude = latitude1
        global longitude
        longitude = longitude1
        html = self.create_map()
        self.view.setHtml(html,QUrl(''))
        # self.view.reload()

    def create_map(self):
        # 创建一个基于folium的地图对象
        # attribution = 'Map data &copy; <a href="https://www.amap.com/">高德地图</a> contributors'
        map = folium.Map(location=[latitude, longitude], zoom_start=13,
                         tiles='https://webrd02.is.autonavi.com/appmaptile?lang=zh_en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
                         attr='高德-中英文对照')

        folium.Marker([latitude, longitude], popup=f"经度:{longitude},纬度:{latitude}").add_to(map)

        # 将地图对象转换为HTML格式
        map_html = map._repr_html_()
        page = CustomWebEnginePage(self.view)
        self.view.setPage(page)
        return map_html

这个是定位相关的代码

打包后我的电脑运行状态:

img

其他电脑:

img

这个问题要等待一下,不行的话尝试清一下缓存再访问。

根据您提供的代码,我看到您正在使用QWebEngineView和folium库来将经纬度信息可视化为地图。您在自己的电脑上运行时一切正常,但是在其他电脑上运行打包后的可执行文件时只显示 "Make this Notebook Trusted to load map: File -> Trust Notebook"。

这个问题可能是由于缺少相关的依赖文件或配置导致的。以下是几种可能的解决方法:

1.确保目标电脑上已经安装了folium库和相关依赖项。您可以使用pip命令来安装它们:

pip install folium


1.检查目标电脑上是否已经安装了适当的浏览器引擎。QWebEngineView依赖于Qt的WebEngine模块,该模块需要可用的浏览器引擎来显示内容。确保目标电脑上已经安装了支持QWebEngineView的浏览器引擎,例如Chromium或QtWebEngine。

2.确保您的打包过程中包含了所需的依赖文件。使用pyinstaller打包应用程序时,您需要确保将所有需要的文件都包含在打包过程中。如果folium或其他依赖文件未正确包含,可能会导致地图无法显示。您可以查看pyinstaller的文档以了解如何正确地打包您的应用程序及其依赖项。

3.如果目标电脑上的浏览器设置了安全策略,可能会阻止加载地图内容。在这种情况下,您可以尝试在打包过程中设置适当的浏览器选项或安全策略,以确保地图能够加载。

希望这些解决方法能够帮助您解决问题。如果问题仍然存在,请提供更多关于错误消息或其他提示的信息,以便我可以更具体地帮助您。

其他电脑估计没有这个程序运行环境的所有需要的依赖项,或者在打包应用程序时应该要包含了必要的依赖项(QWebEngineView和folium相关的库和资源文件)

img

根据提供的代码,可能出现问题的原因可能有两个方面:

1、其他电脑缺少必要的库或组件,你的代码使用了QWebEngineView和folium库来显示地图,这些库可能在其他电脑上并未安装或配置正确。请确保在其他电脑上也安装了这些库,并且正确配置了环境。
2、安全权限问题:在其他电脑上运行打包后的exe文件时,可能出现安全权限问题,导致无法正常显示地图。你可以尝试以管理员身份运行exe文件,或者在运行之前更改安全权限设置,以确保文件能够正常运行。

根据您提供的代码和描述,可能出现的问题是缺少地图相关资源文件或者其他依赖项。您在打包应用程序时需要确保将这些资源文件和依赖项一并打包。

以下是一些可能的解决方法:

  1. 检查是否将地图相关资源文件正确地打包到了应用程序中。这些资源文件可能包括地图图块、样式文件等。确保这些文件能够在其他电脑上正确加载。

  2. 如果您在使用 PyInstaller 打包应用程序,请确保在打包命令中包含了正确的参数和选项,以便将依赖项和资源文件正确地打包到应用程序中。

    例如,可以尝试添加 --add-data 参数来指定要打包的资源文件路径:

    pyinstaller --add-data "path/to/resources;resources" your_script.py
    

    这将告诉 PyInstaller 将指定的资源文件夹 path/to/resources 复制到生成的可执行文件的 resources 文件夹中。

  3. 确保在其他电脑上安装了正确的 QtWebEngine 组件。如果缺少这些组件,可能会导致地图无法正常显示。

    您可以尝试在其他电脑上安装 QtWebEngine 组件,例如通过命令行运行:

    pip install PyQtWebEngine
    

    或者,如果您使用的是 Anaconda 或 Miniconda 等环境,可以尝试运行:

    conda install pyqtwebengine
    

请注意,这些解决方法仅提供了一般的建议,实际情况可能因您的环境和代码结构而有所不同。如果问题仍然存在,您可能需要更深入地调查和调试,或者考虑寻求专业的技术支持。

基于new bing部分指引作答:
修改代码以尝试解决问题,您可以尝试以下几个方面的调整:
确保将地图相关的资源文件包含在打包的可执行文件中。在使用pyinstaller打包时,可以使用--add-data参数指定需要包含的资源文件。例如,如果地图的HTML文件名为map.html,可以使用以下命令添加该文件:

pyinstaller --add-data "map.html;." your_script.py

这将把map.html文件包含在可执行文件中,并确保它在运行时可访问。

修改create_map函数中的地图URL。目前您正在使用高德地图的URL作为瓦片图层,但这可能在其他电脑上无法访问。您可以尝试使用其他地图瓦片提供商的URL,例如OpenStreetMap。在create_map函数中,将tiles参数的值修改为适合您需求的地图瓦片URL,例如:

map = folium.Map(location=[latitude, longitude], zoom_start=13,
                 tiles='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                 attr='OpenStreetMap')

这将使用OpenStreetMap提供的瓦片图层URL,可以在大多数环境中访问。

考虑使用QWebEngineProfile来设置QtWebEngineView的配置。在初始化QWebEngineView之前,尝试添加以下代码:

from PyQt5.QtWebEngineWidgets import QWebEngineProfile

# 设置QtWebEngine的配置
profile = QWebEngineProfile.defaultProfile()
profile.setPersistentCookiesPolicy(QWebEngineProfile.NoPersistentCookies)

这将禁用QtWebEngine的持久化Cookie,有时会导致加载地图时的问题。

这些修改只是一些可能的调整,具体情况可能因您的环境和要求而有所不同。

来自GPT的回答


在其他电脑上运行打包后的exe时只显示 "Make this Notebook Trusted to load map : File -> Trust Notebook" 错误,可能是因为 folium 在加载地图时需要从网络上下载相关资源文件(如瓦片地图)。然而,打包后的exe无法实时从网络上下载资源文件。

为了解决这个问题,您可以尝试以下方法:

将地图资源文件包含在打包后的exe中:将地图资源文件(瓦片地图)下载到本地,并将其包含在打包后的exe中。在运行时,从本地加载资源文件而不是从网络上下载。这样可以确保地图可以正常显示,而无需依赖网络连接。

使用 Qt 的资源系统:将地图资源文件作为 Qt 的资源文件(.qrc)添加到项目中,并使用 Qt 的资源系统在运行时加载地图资源。这样可以将地图资源文件嵌入到可执行文件中,而不依赖外部文件。

以下是使用 Qt 的资源系统加载地图资源文件的示例代码:

python
Copy code
from PyQt5.QtCore import QFile, QIODevice
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView

app = QApplication([])

# 加载地图资源文件
resource_file = QFile(":/path/to/map_resource_file")
if resource_file.open(QIODevice.ReadOnly):
    # 读取资源文件内容
    resource_data = resource_file.readAll()
    resource_file.close()

    # 创建地图视图
    view = QWebEngineView()
    view.setHtml(resource_data, QUrl("http://localhost/"))  # 设置基础URL

    view.show()
else:
    print("Failed to open map resource file.")

app.exec()
在上面的代码中,:path/to/map_resource_file 是地图资源文件在 Qt 项目中的路径。您需要将其替换为实际的资源文件路径。然后,通过 QWebEngineView 加载资源文件,并显示地图视图。

请注意,在使用 Qt 的资源系统时,您需要将资源文件正确地添加到项目的资源文件(.qrc)中,并将其编译到可执行文件中。

希望这些信息对您有帮助,让您能够在打包后的exe上正常显示地图。

更换tiles试试

tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'