【问题标题】:PyQt5 on Pycharm, Modules not usedPycharm 上的 PyQt5,未使用的模块
【发布时间】:2017-06-23 16:29:18
【问题描述】:

正在编写 Python 脚本以在网页运行 JavaScript 后对其进行抓取。我意识到我需要运行 JS,因为使用请求没有返回任何数据。我找到了似乎是我的解决方案here,但我仍然遇到了一些问题。

首先,该教程使用 PyQt4,我已经从项目解释器安装并尝试了多个版本的 PyQt 4 和 5,但仍然找不到解决方案。以下是相关代码:

import PyQt5.QtWebEngineWidgets
import PyQt5.QtCore
import PyQt5.QtWebEngine
import PyQt5.QtWebEngineCore


class Render(QWebpage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()

    def _load_finished(self, result):
        self.frame = self.mainFrame()
        self.app.quit()

QWebpage、QApplication 和 QUrl 调用都有“未解决的引用”错误,四个 PyQt5 导入语句也都有“未使用的导入语句”指示。我已经尝试了几个小时来解决这些问题,多次卸载并重新安装 PyQt 并搜索互联网

任何建议都会很棒,谢谢!

【问题讨论】:

    标签: python pyqt pycharm pyqt4 pyqt5


    【解决方案1】:

    您的导入不正确,在 python 中有很多方法可以做到这一点:在您的情况下,您可能是这样的:

    1.from package import class


    import sys
    
    from PyQt5.QtCore import QUrl
    from PyQt5.QtWebKitWidgets import QWebPage
    from PyQt5.QtWidgets import QApplication
    
    
    # Take this class for granted.Just use result of rendering.
    class Render(QWebPage):
        def __init__(self, url):
            self.app = QApplication(sys.argv)
            QWebPage.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.mainFrame().load(QUrl(url))
            self.app.exec_()
    
        def _loadFinished(self, result):
            self.frame = self.mainFrame()
            self.app.quit()
    
    
    url = 'http://pycoders.com/archive/'
    r = Render(url)
    result = r.frame.toHtml()
    print(result)
    
    1. import package,那么你应该使用每个元素作为package.class

    import sys
    from PyQt5 import QtWebKitWidgets, QtCore, QtWidgets
    
    
    class Render(QtWebKitWidgets.QWebPage):
        def __init__(self, url):
            self.app = QtWidgets.QApplication(sys.argv)
            QtWebKitWidgets.QWebPage.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.mainFrame().load(QtCore.QUrl(url))
            self.app.exec_()
    
        def _loadFinished(self, result):
            self.frame = self.mainFrame()
            self.app.quit()
    
    
    url = 'http://pycoders.com/archive/'
    r = Render(url)
    result = r.frame.toHtml()
    print(result)
    

    如果您使用 pycharm,有一种非常简单的方法可以让 pycharm 为您正确导入包,为此您必须将点放在产生错误的单词上方并执行 Ctrl+M

    注意:如果你使用的是 windows,你将无法使用这些模块,因为 Qt 和 PyQt,使用 chromium,它们似乎与 Windows 有问题。

    【讨论】:

    • 这是一个很好的答案!感谢您对我的进口的帮助。我是来自 Java 的 Python 新手,所以这对我有很大帮助。还有一个问题,我注意到 QtWebKitWidgets 导入,但是在使用 QWebPage 调用它时出现错误,Pycharm 说它找不到参考。我尝试了 QtWebEngine 和 QtWebEngineCore 来替换它,但我似乎无法修复它。有什么想法吗?
    • 看起来 QWebPage 在 PyQt5 的 5.6 版本中被删除了,我有 v5.8.2 而 Pycharm 只能回到 5.6。我现在正在寻找解决方案,任何建议都会很棒!
    • 我给你看的代码我已经从 pyqt 5.7 的版本开始测试了。
    • 你的操作系统是什么?
    • 如果你使用的是windows,你将无法使用这些模块,因为Qt和PyQt,使用铬,似乎它们与Windows有问题。
    猜你喜欢
    • 2017-10-05
    • 2020-11-20
    • 2019-09-25
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多