2015-02-11 69 views
0

我發現如果我們並行地加載一個帶有不同QWebView對象的URL,我們將得到相同的輸出:只有一個QWebView會提出真正的請求。這裏是例子:不同的QWebView對象爲同一個URL產生相同的輸出

from PyQt5.QtCore import QUrl 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWebKitWidgets import QWebView 

def load_and_print(url): 
    view = QWebView() 
    view.load(QUrl(url)) 
    def on_ready(ok): 
     print(view.page().mainFrame().documentElement().toPlainText()) 
    view.loadFinished.connect(on_ready) 

if __name__ == '__main__': 
    app = QApplication([]) 

    # This url outputs random number: 
    url = 'https://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new' 
    load_and_print(url) 
    load_and_print(url) 

    app.exec_() 

    # output: 
    # 39 
    # 39 

我們怎樣才能得到「公平」,每個QWebView對象的唯一輸出,如果url是相同的?

的PyQt 5.4,Windows 7的

+0

應該指定使用的Python,PyQt的,OS版本。 – Trilarion 2015-02-11 22:04:48

+3

嘗試禁用緩存頁面。在C++中,它是通過使用:QWebSettings :: globalSettings () - > setMaximumPagesInCache (0); 72 QWebSettings :: globalSettings () - > setObjectCacheCapacities (0,0,0); 我相信python有類似的東西。 – MKAROL 2015-02-11 22:29:20

+0

@MKarol就像一個額外的評論(錯誤地發佈爲答案之前):我沒有看到這種行爲在Python 3.4.2,PySide 1.2.2(Qt 4.8),Windows 7的所有64位,即使設置了objectcachecapacities到非零的東西。所以它可能是特定於實現的。 – Trilarion 2015-02-12 13:05:36

回答

2

解決辦法是禁用緩存:

view.page().settings().setObjectCacheCapacities(0, 0, 0) 
相關問題