2017-07-16 3 views
-1

Ich habe ein Pyqt-Skript erstellt, das Skript wurde bereits von mir selbst erstellt, aber gestern habe ich angefangen, pyqt zu lernen und habe gerade eine Funktion aus meinem Skript implementiert, aber es stürzt kurz nachdem die Funktion aufgerufen wird. Ich bin Anfänger mit pyqt, also stimme ich zu, dass das Format schlecht sein könnte. HierPyQt5-Code schlägt fehl, wenn eine bestimmte Funktion startet

ist der Code:

# -*- 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_()) 

So sobald gestartet Funktion/Methode aufgerufen wird, Skript stürzt nach print-Anweisung. Es wäre schön, wenn ich Informationen darüber hätte, was falsch ist.

HINWEIS: Dieser Code funktioniert, aber er öffnet einen Link in meinem Browser, während ich möchte, dass er genauso funktioniert wie Anfragen und einfache Python-Skripte.

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') 

Okay, ich versuchte es erneut mit dieser neuen Methode und stürzt immer noch Skript ab.

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()) 

Antwort

0

Okay, es war ziemlich einfaches Problem, war die Frage

.content

Ich hatte eigentlich

verwenden

.text

und danach hat alles gut geklappt.

r.text ist der Inhalt der Antwort in Unicode und r.content ist der Inhalt der Antwort in Bytes. Ich benutzte PyQt5 und Python 3.5 und die neueste Version von Anfragen. Hier

ist, dass def/Methode:

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

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

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