2017-11-16 9 views
0

私はQWebEngineViewを使用し、そのHTMLを設定します。 QWebEngineViewを表示すると、HTMLは常にQWebEngineViewに与えた総面積よりも小さくなります。ページを右クリックして「リロード」をクリックすると、問題は常に解決されますが、エンドユーザーは毎回「リロード」をクリックしないようにします。私はすでに再ロードする方法をオンラインで検索、そして見つけた:PyQt5 QWebview Refresh Issue

​​

これはしかし、それを右クリックと同じ方法をリサイズされていません。

コードを読むのに役立つ場合は、PlotlyプロットをHTMLページ(ロングストーリー)として表示しています。私が使用する上でその後

grid_layout = QGridLayout() 
logo = QLabel() 
logo_pixmap = QPixmap('logo.jpg') 
logo.setPixmap(logo_pixmap) 
grid_layout.addWidget(logo, 0, 0, 2, 6) 
grid_layout.addItem(QSpacerItem(500, 50, QSizePolicy.Minimum, QSizePolicy.Expanding), 0, 6) 

graph_label = QLabel('Graph') 
graph_names_combobox = QComboBox() 

grid_layout.addWidget(graph_label, 0, 7, 1, 1) 
grid_layout.addWidget(self.graph_names_combobox, 0, 8, 1, 4) 

self.graph_widget = QStackedWidget() 
grid_layout.addWidget(self.graph_widget, 2, 1, 10, 12) 

self.graph_window_widget = QWidget() 
self.graph_window_widget.setLayout(grid_layout) 

::私はそれを積層した直後に、私はリロードのコードを使用してみました

temp_webpage = QWebEngineView() 
temp_webpage.setHTML(*graph html goes here*) 
self.graph_widget.addWidget(temp_webpage) 

# In the course of the full program, a lot of graphs are added, so reloading 
# them all here. 
for child in self.graph_widget.children() 
    if type(child) == QWebEngineView: 
     child.page().action(QWebEnginePage.Reload).trigger() 

私はそれが以下のコードで上に座っているウィジェットを作成しますウィジェットを選択したグラフに表示しますが、私が言ったように、同じ結果が出ています。

ページを右クリック→リロードと同じようにする方法はありますか?コメントへの応答で

編集

、私はHTMLを生成するために使用するコードは、このから来ている(データは、私はSQLからどこかにロードパンダのDATAFRAMEですが、私はおもちゃのデータフレームを含めましたここで):

path = QDir.current().filePath('plotly-latest.min.js') 
local = QUrl.fromLocalFile(path).toString() 

data_frame = DataFrame(index=(range(2)),columns=('Date', 'SKUs', 'Lines', 'Orders', 'Eaches')) 

data_frame.loc[0:1,'Date'] = (datetime.date(1999, 1, 1), datetime.date(1999, 1, 2)) 
data_frame.loc[0:1,'SKUs'] = (12, 13) 
data_frame.loc[0:1,'Lines'] = (14, 15) 
data_frame.loc[0:1,'Orders'] = (16, 17) 
data_frame.loc[0:1,'Eaches'] = (18, 19) 

trace_lines = Bar(x=data_frame['Date'], y=data_frame['Lines'], name='Lines', visible=True) 
      trace_orders = Bar(x=data_frame['Date'], y=data_frame['Orders'], name='Orders', visible=False) 
      trace_eaches = Bar(x=data_frame['Date'], y=data_frame['Eaches'], name='Eaches', visible=False) 
      trace_SKUs = Bar(x=data_frame['Date'], y=data_frame['SKUs'], name='SKUs', visible=False) 

data = [trace_lines, trace_orders, trace_eaches, trace_SKUs] 

lines_title = "%s Lines" % name 
orders_title = "%s Orders" % name 
eaches_title = "%s Eaches" % name 
skus_title = "%s SKUs" % name 

update_menus = list([dict(active=0, 
            buttons=list([dict(label='Lines', 
                method='update', 
                args=[{'visible': [True, False, False, False]}, 
                  {'title': lines_title}]), 
               dict(label='Orders', 
                method='update', 
                args=[{'visible': [False, True, False, False]}, 
                  {'title': orders_title}]), 
               dict(label='Eaches', 
                method='update', 
                args=[{'visible': [False, False, True, False]}, 
                  {'title': eaches_title}]), 
               dict(label='SKUs', 
                method='update', 
                args=[{'visible': [False, False, False, True]}, 
                  {'title': skus_title}])]))]) 

layout = dict(title=lines_title, showlegend=False, updatemenus=update_menus, xaxis=dict(
      rangeselector=dict(buttons=list([dict(count=1, label='1m', step='month', stepmode='backward'), 
              dict(count=6, label='6m', step='month', stepmode='backward'), 
              dict(step='all')])), 
      rangeslider=dict(), 
      type='date' 
     )) 

fig = dict(data=data, layout=layout) 

raw_html = '<html><head><meta charset="utf-8" /><script src="{}"></script></head>'.format(local) 
raw_html += '<body>' 
raw_html += plot(fig, include_plotlyjs=False, output_type='div') 
raw_html += '</body></html>' 

return raw_html 
+0

あなたはREPROコードを提供することができますQWebEngineViewを使用した多くの人が、問題を抱えていませんでした。おそらくそれは特定の問題であり、QWebEngineViewを使用してコードを作成する必要はありません。エラーを監視し、おそらくそれを観察することはありません。 – eyllanesc

+0

説明するのは難しいですが、HTMLを実際に共有することはできません。ローカルのソースからplotly-min.jsをロードするので、インターネットに接続する必要はありません。したがって、実行する前に変更する必要があります。 HTMLを生成するコードを与えることができます。 –

+0

もちろん、プロの理由から私はその特定のプロジェクトを共有することはできませんが、エラーを再現する別のプロジェクトを共有すると、テストして解決策を提案するのに役立ちます。 – eyllanesc

答えて

1

可能な解決策は、以下に示すように、第2の時間のためにページをリロードすることです:

self.isFirst = True 
    temp_webpage.loadFinished.connect(self.onLoadFinished) 

def onLoadFinished(self, ok): 
    if self.isFirst: 
     # self.sender().page().action(QWebEnginePage.Reload).trigger() 
     self.sender().reload() 
    self.isFirst = False