2017-09-04 1 views
0

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?

+0

ce qui est 'check_function()'? – eyllanesc

+0

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

+0

@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

Répondre

0

Pour fermer une application avec force que dans ce cas, nous pouvons utiliser sys.exit()

if ret == QMessageBox.No: 
    sys.exit(0)