J'ai utilisé self.close
pour fermer le widget en cours d'exécution. ensemble du code est la suivante:Terminer QWidget ne fonctionne pas
class timeTracker(QWidget):
'''time tracker main application v_0.8'''
def __init__(self, parent=None):
super(timeTracker, self).__init__(parent)
self.grid = QGridLayout()
self.setLayout(self.grid)
while not self.connectivity():
print(self.connectivity())
ret = QMessageBox.warning(self, "Not connected to network. Please check the connection", "", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if ret == QMessageBox.No:
self.close()
qApp.quit()
break
qApp.quit()
# self.time_widget = timeline.timeWidget()
# self.grid.addWidget(self.time_widget, 0, 0)
def connectivity(self):
try:
urllib.request.urlopen("http://www.google.com", timeout=1)
return True
except urllib.error.URLError as error:
return False
if __name__ == "__main__":
application = QApplication(sys.argv)
main_widget = timeTracker()
main_widget.show()
main_widget.move(10, 10)
sys.exit(application.exec_())
Ce que j'attends de ce code est, tant que la fonction de connectivité est de retour vrai, l'utilisateur sera demandé à plusieurs reprises de faire la certaine action si elles cliquez sur Oui. Si elles cliquent non, je voudrais terminer le widget entier. Mais quand je clique non, alors ça passe juste par les lignes après le self.close. Que puis-je faire pour terminer le programme?
ce qui est 'check_function()'? – eyllanesc
Les boucles de blocage ne sont pas conviviales pour la conception de l'interface graphique, il existe d'autres options comme l'utilisation de QTimers. Mais avec le code que vous fournissez, il est impossible de vous aider. – eyllanesc
@eyllanesc 'check_function()' vérifie réellement la connexion réseau, et cliquer sur yes vérifiera le réseau, et s'il est connecté, émettra 'False' et passera aux codes suivants. Mais en cliquant sur non, l'exécution de self.close() ne ferme pas l'application en cours d'exécution. – Mike