Solved Problems with QNetwork | QNetworkAccessManager
-
It's incomplete. You have methods belonging to some class since they have self as first parameters and code that is just indented which may or may not belong to said class.
-
@SGaist This is everything used
class software(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) # Set Gui to run fullscreen #self.showFullScreen() # Show the default Frame on first "boot" self.ui.DefaultFrame.raise_() # Set the Brightnesssliders min and max self.ui.Brightnessslider.setMinimum(0) self.ui.Brightnessslider.setMaximum(255) # Convert the ranges of each slider self.ui.Brightnessslider.valueChanged['int'].connect(lambda: self.convertRange("brightness")) self.ui.patternSpeedSlider.valueChanged['int'].connect(lambda: self.convertRange("speed")) self.ui.patternSpacingSlider.valueChanged['int'].connect(lambda: self.convertRange("spacing")) self.ui.colorSaturationSlider.valueChanged['int'].connect(lambda: self.convertRange("saturation")) # Hook each slider up to its function self.ui.Brightnessslider.valueChanged.connect(self.adjustBrightness) self.ui.patternSpeedSlider.valueChanged.connect(self.adjustDelay) self.ui.patternSpacingSlider.valueChanged.connect(self.adjustSpacing) self.ui.colorHueSlider.valueChanged.connect(self.Hue) self.ui.colorSaturationSlider.valueChanged.connect(self.Sat) # Hook each Color Button up to its function self.ui.colorRedButton.clicked.connect(lambda: self.buttonSetHue("Red")) self.ui.colorOrangeButton.clicked.connect(lambda: self.buttonSetHue("Orange")) self.ui.colorYellowButton.clicked.connect(lambda: self.buttonSetHue("Yellow")) self.ui.colorGreenButton.clicked.connect(lambda: self.buttonSetHue("Green")) self.ui.colorAquaButton.clicked.connect(lambda: self.buttonSetHue("Aqua")) self.ui.colorBlueButton.clicked.connect(lambda: self.buttonSetHue("Blue")) self.ui.colorPurpleButton.clicked.connect(lambda: self.buttonSetHue("Purple")) self.ui.colorPinkButton.clicked.connect(lambda: self.buttonSetHue("Pink")) # Hook each pattern Button up to its function self.ui.patternSolidcolorButton.clicked.connect(lambda: self.selectPattern("SOLIDCOLOR")) self.ui.patternRainbowButton.clicked.connect(lambda: self.selectPattern("RAINBOW")) self.ui.patternTheaterchaseButton.clicked.connect(lambda: self.selectPattern("THEATERCHASE")) self.ui.patternJuggleButton.clicked.connect(lambda: self.selectPattern("JUGGLE")) self.ui.patternRunninglightButton.clicked.connect(lambda: self.selectPattern("RUNNINGLIGHT")) self.ui.patternCylonButton.clicked.connect(lambda: self.selectPattern("CYLON")) self.ui.patternMitosisButton.clicked.connect(lambda: self.selectPattern("MITOSIS")) self.ui.SS_patternTheaterChaseButton.clicked.connect(lambda: self.selectPattern("SS_THEATERCHASE")) self.ui.SS_patternCylonButton.clicked.connect(lambda: self.selectPattern("SS_CYLON")) # Hook UV Button to its function self.ui.uvlightsButton.clicked.connect(self.toggleUV) # Hook each Board Button up to its function self.ui.studioLightsButton.clicked.connect(lambda: self.setSelectedBoard("Studio Lights")) self.ui.neonHeavenButton.clicked.connect(lambda: self.setSelectedBoard("Neon Heaven")) self.ui.vitrineskapButton.clicked.connect(lambda: self.setSelectedBoard("Vitrineskap")) self.ui.smSureButton.clicked.connect(lambda: self.setSelectedBoard("Små Sure")) # Hidee UV Light Frame self.ui.UVLightsframe.setVisible(False) # Button array for the Pattern Buttons self.buttons = [self.ui.patternSolidcolorButton, self.ui.patternRainbowButton, self.ui.patternTheaterchaseButton, self.ui.patternJuggleButton, self.ui.patternRunninglightButton, self.ui.patternCylonButton, self.ui.patternMitosisButton] # Set Globals global lastbutton global spotifyFetch global switchstate self.selectedBoard = None self.boardURL = None self.switchstate = False self.switchLabel = "OFF" self.spotifyFetch = False self.lastbutton = None self.cssButton = "" self.lastStyleButton = None self.TempSpotify = "" self.MatrixOnline = False self.ESPOnline = False self.RunOnce = False self.nam = QtNetwork.QNetworkAccessManager() self.nam.finished.connect(self.handleResponse) # Board array for all the boards this software can controll self.board = { "Studio Lights": {'Name': "Studio Lights", 'UVVisible': False, 'ip': "192.168.10.138", 'Status': "Offline"}, "Neon Heaven": {'Name': "Neon Heaven", 'UVVisible': True, 'ip': "192.168.10.146", 'Status': "Offline"}, "Vitrineskap": {'Name': "Vitrineskap", 'UVVisible': False, 'ip': "192.168.10.184", 'Status': "Offline"}, "Små Sure": {'Name': "Små Sure", 'UVVisible': False, 'ip': "192.168.10.2", 'Status': "Offline"}, } # Pattern array self.pattern = { "SOLIDCOLOR": {'hightlightButton': [1, "patternSolidcolorButton"], 'setDefaults': [0, 2], 'disableFeatures': [True, False, False, True, True, True, True], 'selectedPattern': 1}, "RAINBOW": {'hightlightButton': [2, "patternRainbowButton"], 'setDefaults': [25, 2], 'disableFeatures': [True, True, False, False, False, False, True], 'selectedPattern': 2}, "THEATERCHASE": {'hightlightButton': [3, "patternTheaterchaseButton"], 'setDefaults': [127, 3], 'disableFeatures': [True, True, True, True, True, True, True], 'selectedPattern': 3}, "JUGGLE": {'hightlightButton': [4, "patternJuggleButton"], 'setDefaults': [0, 2], 'disableFeatures': [True, False, False, False, False, False, True], 'selectedPattern': 4}, "RUNNINGLIGHT": {'hightlightButton': [5, "patternRunninglightButton"], 'setDefaults': [25, 10], 'disableFeatures': [True, True, True, True, True, True, True], 'selectedPattern': 5}, "CYLON": {'hightlightButton': [6, "patternCylonButton"], 'setDefaults': [50, 2], 'disableFeatures': [True, True, True, True, True, True, True], 'selectedPattern': 6}, "MITOSIS": {'hightlightButton': [7, "patternMitosisButton"], 'setDefaults': [50, 199], 'disableFeatures': [True, True, True, True, True, True, True], 'selectedPattern': 7}, "SS_THEATERCHASE": {'selectedPattern': 2}, "SS_CYLON": {'selectedPattern': 3}, } # Hue array self.hue = { "Red": {'hue': 0}, "Orange": {'hue': 32}, "Yellow": {'hue': 64}, "Green": {'hue': 96}, "Aqua": {'hue': 128}, "Blue": {'hue': 160}, "Purple": {'hue': 192}, "Pink": {'hue': 224}, } # --- THREAD -------------------------------------------------------------------------------------------------------- # def Thread_Functions(): threading.Timer(1.0, Thread_Functions).start() self.doRequest() Thread_Functions() # --- PING ---------------------------------------------------------------------------------------------------------- # def doRequest(self): print("Run") print("#----------------------------------#") for key, value in self.board.items(): url = "http://" + value["ip"] print("doRequests : http://" + value["ip"]) req = QtNetwork.QNetworkRequest(QUrl(url)) self.nam.get(req) def handleResponse(self, reply): er = reply.error() replyURL = reply.url().url().replace("http://", "") if er == QtNetwork.QNetworkReply.NoError: bytes_string = reply.readAll() print("") print("#----------------------------------#") print("Result") print("#----------------------------------#") print("handleResponse : " + str(bytes_string, 'utf-8')) if replyURL == "192.168.10.138": self.board["Studio Lights"]['Status'] = "Online" print("Studio Lights : Online") if replyURL == "192.168.10.146": self.board["Neon Heaven"]['Status'] = "Online" print("Neon Heaven : Online") if replyURL == "192.168.10.184": self.board["Vitrineskap"]['Status'] = "Online" print("Vitrineskap : Online") if replyURL == "192.168.10.2": self.board["Små Sure"]['Status'] = "Online" print("Små Sure : Online") else: print("Error occured: ", er) print(reply.errorString()) if replyURL == "192.168.10.138": self.board["Studio Lights"]['Status'] = "Offline" print("Studio Lights : Offline") if replyURL == "192.168.10.146": self.board["Neon Heaven"]['Status'] = "Offline" print("Neon Heaven : Offline") if replyURL == "192.168.10.184": self.board["Vitrineskap"]['Status'] = "Offline" print("Vitrineskap : Offline") if replyURL == "192.168.10.2": self.board["Små Sure"]['Status'] = "Offline" print("Små Sure : Offline") if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) myapp = software() myapp.show() sys.exit(app.exec_())
-
It still is not complete for the reasons I stated before.
How fast are you generating these requests ?
-
@SGaist updated the code above... that is the entire code!
-
Why are you using threads ?
QNAM is asynchronous so there's currently no need for threads especially in the first stage of development like that. -
@SGaist the reason for using threading is because i need to check constantly if the board im controlling is online or not. without threading QNAM only runs once
-
Use a QTimer to trigger sending your ping requests at regular intervals.
-
@SGaist what the..... QTimer fixed it... ok i need to read about QTimer!
-
@SGaist but yea still having the problem that the QNetworkReply does not give any error or output on boards that are offfline :S
else: print("Error occured: ", er) print(reply.errorString())
-
i dont understand why it doesn't give error not even (timeouterror)
-
anyone who can help?
-
IIRC, the default timeout is 30 seconds, did you wait that long ?
-
@SGaist i set 3000 on the Qtimer
self.ping = QTimer(self) self.ping.start(3000) self.ping.timeout.connect(self.doRequest)
-
@Kris-Revi I think @SGaist means timeouts for network requests
-
@jsulm oh, i googled and saw many forum threads saying that you couldn't set timeout in Qt, granted the posts were a few years old! how do i set timeout?
-
@Kris-Revi First thing would be to wait at least 30sec (default timeout) to see whether you get the timeout error.
-
@jsulm i waited a looong time and i got "Error : 99 Timeout" but is there anyway to set timeout?
-
-
@SGaist where do i put this?
-
@jsulm where do i put this?
QNetworkConfiguration.setConnectTimeout(1)