2012-03-08 85 views
1

我希望我的代碼通過顯示qtwidget然後運行forloop, 運行,但它運行forloop然後向我顯示我的小部件。爲什麼是這樣?PyQt運行時問題

class tes(QWidget): 

    def __init__(self): 
     super(tes, self).__init__() 
     self.initUI() 
     for i in range (1000000): 
      print("s") 

    def initUI(self): 
     t = QTableWidget(8,8,self)   
     self.show() 
     self.resize(1000,1000) 
     t.setGeometry(0,0,500,500) 
     t.show() 

def main(): 
    app = QApplication(sys.argv) 
    t = tes() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 
+0

這是因爲「顯示」出現在'app.exec _()'行(即主循環啓動時)。我想你需要澄清你正在嘗試做什麼。 – Avaris 2012-03-08 17:36:13

回答

0

這是因爲你在for循環中運行app.exec_()tes對象初始化過程中執行。

6

在循環之前添加QApplication.processEvents()。您的小部件將顯示,但無響應。要使應用程序響應,請將processEvents()調用添加到循環的某些步驟。

實施例:

def __init__(self): 
    super(tes, self).__init__() 
    self.initUI() 
    QApplication.processEvents() 
    for i in range (1000000): 
     if not i % 3: # let application process events each 3 steps. 
      QApplication.processEvents() 
     print("s") 
+0

是的,我解決了這個問題。歡呼 – K100 2012-03-08 18:58:56

+1

更具體地說,當您調用'self.initUI()'時,正在生成的事件(如showEvent)正在排隊到事件隊列中,但事件循環尚未開始。當你調用'processEvents()'時,你迫使它手動清除隊列。 – jdi 2012-03-08 20:22:06

0

窗口小部件只顯示一次運行該應用程序,而不是它的初始化時。你究竟想在循環中做什麼?將它連接到信號或在事件中處理它可能會更好,但這一切都取決於您想要達到的效果。