2017-09-04 43 views
0

我使用self.close來關閉正在運行的小部件。整個代碼如下:終止QWidget不起作用

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_()) 

我從這個代碼想到的是,只要連接函數返回True時,用戶將反覆要求做某些動作,如果他們單擊是。如果他們點擊否,我想終止整個小部件。但是當我點擊「否」時,它會在self.close之後經過這些行。我能做些什麼來真正終止程序?

+0

什麼是'check_function()'? – eyllanesc

+0

對於GUI設計來說,阻塞循環不方便用戶使用,還有其他選項,如使用QTimers。但隨着你提供的代碼是不可能幫助你的。 – eyllanesc

+0

@eyllanesc'check_function()'實際上檢查網絡連接,點擊yes將檢查網絡,如果連接,則發出False並進入下一個代碼。但是單擊否,因此執行self.close()不會關閉正在運行的應用程序。 – Mike

回答

0

要在這種情況下,強行關閉應用程序,我們可以使用sys.exit()

if ret == QMessageBox.No: 
    sys.exit(0) 
相關問題