2015-10-22 66 views
0

我试图与PySide(Ubuntu 15.04,Python3.4,PySide 1.2.4)建立网络连接。我使用了the documentation的示例代码。Pyside:QNetworkAccessManager不发送请求

QNetworkAccessManager不发送请求,我也没有回答。我用QNetworkSession(QNetworkConfigurationManager().defaultConfiguration()).State()检查了网络状态,但它说国家是无效的。这似乎没有任何意义,因为我在台式电脑上通过网络连接通过以太网电缆。

我的用于测试完整的例子是下面的代码:

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

import sys 
from PySide.QtGui import QApplication 
from PySide.QtCore import QUrl 
from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkSession, QNetworkConfigurationManager 


def replyFinished(reply): 
    print(reply) 


if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    manager = QNetworkAccessManager() 
    manager.finished.connect(replyFinished) 
    print(QNetworkSession(QNetworkConfigurationManager().defaultConfiguration()).State()) 
    print("Sending request") 
    print(manager.get(QNetworkRequest(QUrl("http://www.heise.de/ct/")))) 

这将打印

PySide.QtNetwork.QNetworkSession.State.Invalid 
Sending request 
<PySide.QtNetwork.QNetworkReply object at 0x7f4b59c9af08> 

但应该两次显示PySide.QtNetwork.QNetworkReply对象。

+0

它不会工作,没有'app.exec _()'。 –

回答

0

我的例子太小了。我意识到这是由于帕维尔斯特拉霍夫的评论。我将它扩展为用按钮显示一个窗口。通过点击按钮它连接成功。 QNetworkSession(QNetworkConfigurationManager().defaultConfiguration()).State()仍然无效,但它的工作原理。

这是工作代码:

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

import sys 
from PySide.QtGui import QApplication, QWidget, QBoxLayout, QPushButton 
from PySide.QtCore import QUrl 
from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkSession, QNetworkConfigurationManager 


class Window(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.manager = QNetworkAccessManager() 
     self.manager.finished.connect(self.reply_finished) 
     layout = QBoxLayout(QBoxLayout.TopToBottom) 
     button = QPushButton("connect") 
     button.clicked.connect(self.network_connect) 
     layout.addWidget(button) 
     self.setLayout(layout) 
     self.setWindowTitle("Network test") 
     self.setGeometry(100, 100, 200, 150) 
     self.show() 

    def network_connect(self): 
     print(QNetworkSession(QNetworkConfigurationManager().defaultConfiguration()).State()) 
     request = QNetworkRequest(QUrl("http://example.org")) 
     print("Sending request") 
     self.manager.get(request) 

    def reply_finished(self, reply): 
     print(reply) 
     print(reply.readData(500)) 


if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    window = Window() 
    app.exec_()