单击 Pyqt5 QWebEngineView 中的下载绘图图标时有关绘图的问题 [重复]

Posted

技术标签:

【中文标题】单击 Pyqt5 QWebEngineView 中的下载绘图图标时有关绘图的问题 [重复]【英文标题】:Issue about plotly when clicked the download plot icon within Pyqt5 QWebEngineView [duplicate] 【发布时间】:2020-06-24 00:36:00 【问题描述】:

我创建了一个从 QWebEngineView 扩展的类,并声明了一个 modeBar 配置,如下代码:

class Canvas(QWebEngineView):
    def __init__(self, parent: QFrame = None):
        super(QWebEngineView, self).__init__()
        dir = Path(environ['USERPROFILE']) / 'Desktop'
        self.mode_bar_config = 
            'toImageButtonOptions': 
                'format': 'jpeg',  # one of png, svg, jpeg, webp
                'filename': (dir / ('test_img_' +
                            datetime.now().strftime('%Y%m%d%H%M%S')))
                            .as_posix(),
                'height': 400,
                'width': 650,
                'scale': 1,
                'modeBarButtonsToRemove': ['toggleSpikelines']
            
        
        self.parent = parent
        self.update_canvas()

    def update_canvas(self, list_of_data: list = None):
       try:
          if list_of_data is None:
             list_of_data = []

          self.fig1 = FftFigure('Time domain',
                                        x_title='sample points',
                                        y_title='dbm')
          if len(list_of_data) > 0:
             x = [index for index in range(len(list_of_data))]
             self.fig1.update_data(x, y_data=list_of_data)
         
          html = '<html><head><meta charset="utf-8" />'
          html += '<script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>'
          html += '<body style="width:650px;height:700px;">'
          html += offline.plot(self.fig1, output_type='div',
                                       include_plotlyjs=False,
                                       config=self.mode_bar_config)
          html += '</body></html>'
          self.setHtml(html)
          layout = QVBoxLayout()
          layout.addWidget(self)
          self.parent.setLayout(layout)
          if len(list_of_data) > 0:
             self.render(self)
      except Exception as e:
         print_exc()

但是当我单击下载绘图图标时这不起作用,我在桌面上找不到保存的图像 我该如何解决这个问题。

【问题讨论】:

这能回答你的问题吗? How to open download file dialog with QWebEngineView? 【参考方案1】:

发生这种情况是因为下载是由 Web 浏览器进行的,在本例中是您的 QWebEngine。您需要确定如何在 PyQt5 中处理您的下载。

一种方法:

self.browser = QWebEngineView(self)  #"self" could be a QDialog class
self.browser.page().profile().downloadRequested.connect(self._on_downloaFunc)

_on_downloadFunc 是决定如何处理您的下载的函数。可能是:

def _on_downloadFunc(self, download):
    # save_file_name_dialog is a function to show the windows file window
    image_path = save_file_name_dialog(self, "Choose your file", "Png files (*.png)")
    if path:
        download.setPath(image_path)
        download.accept()

【讨论】:

以上是关于单击 Pyqt5 QWebEngineView 中的下载绘图图标时有关绘图的问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 中的 QWebEngineView 和 QWidget

Qt 5.7 - QWebEngineView - 将 HTML 按钮单击事件连接到 C++/Qt 插槽

PyQt5中的QWebEngineView和QWidget

PyQt5:QWebEngineView 无法在 Windows 7 中呈现本地 html 文件

PyQt5 QWebEngineView 不显示任何内容

PyQt5 QWebEngineView 无法正常工作