Bonjour,

Suite à une mise à jour de QtWebKit la méthode QWebView.setUrl() tronque systématiquement les url internes du basename

code exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
# -*- coding: utf-8 -*-
 
import sys
 
from PyQt4 import QtCore, QtGui, QtWebKit
print "QtWebKit vers: ", QtWebKit.qWebKitVersion()
 
class MiniView(object):
    def setupUi(self, MainWindow):
        MainWindow.resize(400, 300)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.webView = QtWebKit.QWebView(self.centralwidget)
        self.gridLayout.addWidget(self.webView, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        MainWindow.show()
        QtCore.QCoreApplication.processEvents()
 
        self.osm_url = QtCore.QUrl("/home/vincent/g13n/Qmap/OSmapViewer.html")
        self.webView.setUrl(self.osm_url)
        print "Url: ", self.webView.url()
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = MiniView()
    ui.setupUi(MainWindow)
    sys.exit(app.exec_())
Avec la version de QtWebKit 2.2, que j'ai toujours sous Debian et plusieurs Ubuntu, pas de soucis, la page s'affiche et je print ceci:

vincent@tiemoko:~/Qmap$ python map.py
QtWebKit vers: 532.4
Url: PyQt4.QtCore.QUrl(u'file:///home/vincent/g13n/Qmap/OSmapViewer.html')
Sous Arch Linux, où une mise à jour a eu lieu avant-hier vers QtWebKit 2.2.1 la page ne s'affiche pas et le print montre que l'url est incomplète:

[vincent@myhost Qmap]$ python2 map.py
QtWebKit vers: 534.34
Url: PyQt4.QtCore.QUrl(u'file:///home/vincent/g13n/Qmap')
À tous hasards, j'ai posté sur la ML de PyQt, sans réponse mais je ne pense pas à un bug PyQt.

Je met un html pour tester, cela charge une carte d'OpenStreetMap.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
  html { height: 100% }
  body { height: 100%; margin: 0px; padding: 0px }
  #map_canvas { height: 100% }
</style>
<script type="text/javascript"
    src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
 
 
  function updateLatLonFields(lat, lon, zoom) {
    document.getElementById("coord").innerHTML = lat + ", " + lon + ", " + zoom;
  }
 
  function initialize() {
    var latlng = new google.maps.LatLng(50.83190499378414, 4.385846084594736);
    var myOptions = {
      zoom: 18,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
 
    document.getElementById("coord").innerHTML = latlng.lat() + ",  " + latlng.lng() + ", 18";
 
    google.maps.event.addListener(map, 'bounds_changed', function() {
        var center = map.getCenter();
        var zoom = map.getZoom();
        updateLatLonFields(center.lat(), center.lng(), zoom);
        });
 
  }
 
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
<iframe id="coord" style="display: none">
</iframe>
</html>
J'ai fais d'autres essais, entre autres avec QWebInspector (pas mal ce truc) toujours avec le même résultat.

Des idées ?

Merci.