PyQt QWebkitWidgets не отображает веб-страницу при вызове из командной строки или конструктора объекта - PullRequest
0 голосов
/ 10 сентября 2018
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebKit import *
from PyQt5.QtWebKitWidgets import *
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
import sys
import os

class Navigation(QWidget):
    def __init__(self):
        super().__init__()
        self.web = QWebView()
        self.web.settings().setAttribute(QWebSettings.
             JavascriptEnabled,True)
        #self.web.settings().setAttribute(QWebSettings.
        #    JavascriptCanOpenWindows, True)
        self.web.settings().setAttribute(QWebSettings.
            JSAC, True)

        #self.web.settings().setAttribute(QWebSettings.
        #DeveloperExtrasEnabled, True)
        filepath = os.path.join(
            os.path.dirname(__file__), 'MapSite.html')
        self.web.show()
        self.web.load(QUrl.fromLocalFile(filepath))

app = QApplication(sys.argv)
ex= Navigation()
app.exec_()

Эта программа PyQt отображает веб-страницу только при запуске из IDLE для python3.Когда я запускаю эту программу из командной строки или создаю объект класса Navigation путем импорта в другие файлы, веб-страница не отображается, только белый экран

EDIT

pi@raspberrypi:~/RaspiCallSystem4 $ python3 navigation.py 
libEGL warning: DRI2: failed to authenticate
qt5ct: using qt5ct plugin
qt5ct: D-Bus system tray: no

, когда я выполняю из командной строки. Это дает вышеуказанный вывод, веб-окно запускается, но только с белой страницей, выполнение из IDLE выполняется гладко

enter image description here

1 Ответ

0 голосов
/ 10 сентября 2018

Как показывает следующий ответ , в некоторых случаях команда os.path.dirname(__file__) может возвращать пустую строку, и это относится к терминалу, поэтому существует 2 возможных решения:

filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'MapSite.html')

Или:

filepath = QDir.current().absoluteFilePath('MapSite.html')
...