Как я могу запустить пока цикл с PyQt5

Это элегантное решение 2017 с использованием async / await:

Очень простое использование:

const results = await filter(myArray, async num => {
  await doAsyncStuff()
  return num > 2
})

Вспомогательная функция (скопируйте это на свою веб-страницу):

async function filter(arr, callback) {
  const fail = Symbol()
  return (await Promise.all(arr.map(async item => (await callback(item)) ? item : fail))).filter(i=>i!==fail)
}

Демонстрация:

// Async IIFE
(async function() {
  const myArray = [1, 2, 3, 4, 5]

  // This is exactly what you'd expect to write 
  const results = await filter(myArray, async num => {
    await doAsyncStuff()
    return num > 2
  })

  console.log(results)
})()


// Arbitrary asynchronous function
function doAsyncStuff() {
  return Promise.resolve()
}


// The helper function
async function filter(arr, callback) {
  const fail = Symbol()
  return (await Promise.all(arr.map(async item => (await callback(item)) ? item : fail))).filter(i=>i!==fail)
}

Я даже выброшу код CodePen .

0
задан Mo7ammed 7amad 15 January 2019 в 22:53
поделиться

1 ответ

Не усложняйте QThread, используйте библиотеку потоков:

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = mainApp()
    threading.Thread(target=window.checkInternetConnection, daemon=True).start()
    window.show()
    app.exec()

С другой стороны, поскольку вы используете поток, вы не должны обновлять графический интерфейс из другого потока, для этого вы можете используйте QMetaObject::invokeMethod:

def checkInternetConnection(self,host="8.8.8.8", port=53, timeout=3):
    while True:
        try:
            socket.setdefaulttimeout(timeout)
            socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
            self.conection = True
        except Exception as e:
            self.conection = False
            print(e)
        msg = "" if self.conection else 'Please Check Internect Connection'
        print("msg", msg)
        QtCore.QMetaObject.invokeMethod(self.label_9, "setText",
            QtCore.Qt.QueuedConnection,  
            QtCore.Q_ARG(str, msg))
    self.finished.emit()
0
ответ дан eyllanesc 15 January 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: