2017-07-16 39 views
-1

我創建了一個pyqt腳本,這個腳本已經由我自己創建了,但是我昨天開始學習pyqt,並且剛剛從我的腳本實現了一個函數,但是在調用函數後它很快崩潰了。我是pyqt的初學者,所以我同意格式可能很差。當某個函數啓動時PyQt5代碼失敗

下面是代碼:

# -*- coding: utf-8 -*- 
from PyQt5 import QtCore, QtGui, QtWidgets 
from lxml import html 
import requests 

class Ui_ShopifyFeeder(object): 
    def started(self): 
     print("STARTED...\n") 
     resp = requests.get('https://www.google.com/', headers=headers) 
     print(resp.content) 


    def setupUi(self, ShopifyFeeder): 
     ShopifyFeeder.setObjectName("ShopifyFeeder") 
     ShopifyFeeder.resize(423, 105) 
     self.gridLayout = QtWidgets.QGridLayout(ShopifyFeeder) 
     self.gridLayout.setObjectName("gridLayout") 
     self.constant_value = QtWidgets.QLineEdit(ShopifyFeeder) 
     self.constant_value.setEnabled(True) 
     self.constant_value.setObjectName("constant_value") 
     self.gridLayout.addWidget(self.constant_value, 1, 0, 1, 1) 
     self.percentage_value_selection = QtWidgets.QRadioButton(ShopifyFeeder) 
     self.percentage_value_selection.setObjectName("percentage_value_selection") 
     self.gridLayout.addWidget(self.percentage_value_selection, 2, 1, 1, 1) 
     self.percentage_value = QtWidgets.QLineEdit(ShopifyFeeder) 
     self.percentage_value.setObjectName("percentage_value") 
     self.gridLayout.addWidget(self.percentage_value, 2, 0, 1, 1) 
     self.constant_value_selection = QtWidgets.QRadioButton(ShopifyFeeder) 
     self.constant_value_selection.setObjectName("constant_value_selection") 
     self.gridLayout.addWidget(self.constant_value_selection, 1, 1, 1, 1) 
     self.verticalLayout = QtWidgets.QVBoxLayout() 
     self.verticalLayout.setObjectName("verticalLayout") 
     self.starter = QtWidgets.QPushButton(ShopifyFeeder) 
     self.starter.clicked.connect(self.started) 
     self.starter.setAutoFillBackground(False) 
     self.starter.setObjectName("starter") 
     self.verticalLayout.addWidget(self.starter) 
     self.gridLayout.addLayout(self.verticalLayout, 3, 0, 1, 2) 

     self.retranslateUi(ShopifyFeeder) 
     self.starter.clicked['bool'].connect(ShopifyFeeder.setEnabled) 
     self.starter.clicked['bool'].connect(self.constant_value.setEnabled) 
     self.constant_value_selection.clicked['bool'].connect(self.constant_value.setDisabled) 
     self.percentage_value_selection.clicked['bool'].connect(self.percentage_value.setDisabled) 
     self.constant_value_selection.clicked['bool'].connect(self.percentage_value_selection.setDisabled) 
     self.constant_value_selection.clicked['bool'].connect(self.percentage_value.setDisabled) 
     self.percentage_value_selection.clicked['bool'].connect(self.constant_value.setDisabled) 
     self.percentage_value_selection.clicked['bool'].connect(self.constant_value_selection.setDisabled) 
     QtCore.QMetaObject.connectSlotsByName(ShopifyFeeder) 

    def retranslateUi(self, ShopifyFeeder): 
     _translate = QtCore.QCoreApplication.translate 
     ShopifyFeeder.setWindowTitle(_translate("ShopifyFeeder", "ShopifyFeeder")) 
     self.percentage_value_selection.setText(_translate("ShopifyFeeder", "Percentage")) 
     self.constant_value_selection.setText(_translate("ShopifyFeeder", "Constent")) 
     self.starter.setText(_translate("ShopifyFeeder", "Start")) 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    ShopifyFeeder = QtWidgets.QWidget() 
    ui = Ui_ShopifyFeeder() 
    ui.setupUi(ShopifyFeeder) 
    ShopifyFeeder.show() 
    sys.exit(app.exec_()) 

因此,一旦開始函數/方法被調用時,腳本print語句後崩潰。如果我能得到關於最新錯誤的信息,那將是非常好的。

注意:這段代碼可以工作,但它會在我的瀏覽器中打開一個鏈接,而我希望它完全按照請求和基本Python腳本工作。

def started(self): 
    print("STARTED...\n") 
    url = QtCore.QUrl('https://www.yahoo.com/') 
    if not QtGui.QDesktopServices.openUrl(url): 
     QtGui.QMessageBox.warning(self, 'Open Url', 'Could not open url') 

好吧,我再次嘗試這種新方法,仍然腳本崩潰。

def loadPage(self): 
    print("STARTED...\n") 
    page = QtWebKit.QWebPage() 
    loop = QtCore.QEventLoop() # Create event loop 
    page.mainFrame().loadFinished.connect(loop.quit) # Connect loadFinished to loop quit 
    page.mainFrame().load('https://www.yahoo.com/') 
    loop.exec_() # Run event loop, it will end on loadFinished 
    print(page.mainFrame().toHtml()) 

回答

0

好這是相當簡單的問題,這個問題是

。內容

其實我不得不使用

的.text

之後,一切都很順利。

r.text是unicode中響應的內容,r.content是響應的內容(以字節爲單位)。我正在使用PyQt5和python 3.5以及最新版本的請求。

下面是DEF /方法:

def loadPage(self): 
    print("STARTED...\n") 

    resp = requests.get('https://www.yahoo.com/') 

    tree = html.fromstring(resp.text) 
    print("\nFinished...")