【问题标题】:Error calling slot with PySide使用 PySide 调用插槽时出错
【发布时间】:2011-09-07 04:22:20
【问题描述】:

我正在尝试抓取依赖于 JavaScript 的 site。这是一个非常基本的网站,有一个简单的整体列表(实际上是城市名称),我不想将其复制并粘贴到 Excel 中。该列表由javascript控制,所以我认为我需要使用类似Qt4的东西来模拟浏览器,我一直在尝试PySide。

我从一些非常基本的代码开始(我改编自 here):

#!/usr/bin/env python

import sys
import signal 
import argparse

from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import QWebPage


class Crawler( QWebPage ):
def __init__(self, url, file):
    QWebPage.__init__( self )
    self._url = url
    self._file = file

def crawl( self ):
    signal.signal( signal.SIGINT, signal.SIG_DFL )
    self.connect( self, SIGNAL( 'loadFinished(bool)' ), self._finished_loading )
    self.mainFrame().load( QUrl( self._url ) )

def _finished_loading( self, result ):
    file = open( self._file, 'w' )
    file.write( self.mainFrame().toHtml() )
    file.close()
    sys.exit( 0 )

def main():
    app = QApplication( sys.argv )
    args = get_args()
    crawler = Crawler( args.url, args.file )
    crawler.crawl()
    sys.exit( app.exec_() )

def get_args():
"""
Command argument parser

Returns structure:
    args.url
    args.file
"""

parser = argparse.ArgumentParser(description='Basic scraper')
parser.add_argument( '-u', '--url', dest='url', help='URL to fetch data from', default='http://www.google.com')
parser.add_argument('-f','--file', dest='file', help='Local file path to save data to', default='data.txt')

args = parser.parse_args()
return args


if __name__ == '__main__':
    main()

问题是,我不太了解 PySide/Qt4。我收到此错误:

Error calling slot "_finished_loading" 

我什至不确定这意味着什么。这是我可以解决的问题,而无需参与找出 Qt4 和 PySide 的漫长而艰巨的过程吗?这是一个简单的解决方法吗?

感谢所有输入。

【问题讨论】:

    标签: javascript python pyqt4 web-scraping pyside


    【解决方案1】:

    尝试将_finished_loading 中的sys.exit( 0 ) 替换为QApplication.instance().exit()

    【讨论】:

      【解决方案2】:

      您没有将 _finished_loading 声明为插槽。为此,您需要像这样使用 @Slot() 装饰器

      @Slot(str)
      def _finished_loading(self, result):
          print(result)
      
      @Slot(int, int)
      def add(self, a, b):
          print(a+b)
      

      等等。装饰器的参数是预期函数参数的 Python 数据类型的逗号分隔列表。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 2011-10-21
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        相关资源
        最近更新 更多