2015-10-22 62 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_()