2017-01-04 51 views
2

我創建了一個有兩個按鈕的GUI:一個說「打開輸入文件:」,另一個說「運行」。Qt:腳本在按下按鈕之前運行

當有人點擊「打開輸入文件:」時,他/她可以選擇一個文件作爲輸入,當該人點擊「運行」時,應該啓動腳本runScrapy。

當按鈕被設置的部分看起來像這樣:

def retranslateUi(self, MainWindow): 
    _translate = QtCore.QCoreApplication.translate 
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
    self.pushButton.setText(_translate("MainWindow", "Open Input File:")) 
    self.pushButton.clicked.connect(self.showDialog) 
    self.pushButton_2.setText(_translate("MainWindow", "Run")) 
    self.pushButton_2.clicked.connect(self.runScrapy) 
    self.label.setText(_translate("MainWindow", "Happy Scraping")) 

def showDialog(self): 
    fileName = QFileDialog.getOpenFileName() 
    if fileName: 
     global file 
     file = fileName[0] 
     print(file) 

def runScrapy(self): 
    process = CrawlerProcess() 
    process.crawl(BasicSpider) 
    process.start() # the script will block here until the crawling is finished 

然而,不是被點擊pushButton_2時運行「runScrapy」,「runScrapy」開始運行後,我開始這個腳本。我不明白爲什麼,因爲showDialog只會在點擊「打開輸入文件:」後彈出。

問:如何更改我的代碼,以便runScrapy僅在單擊pushButton_2時運行?

在此先感謝!

回答

2

你應該從Qt事件處理開始。

if __name__ == "__main__": 
app = QtGui.QApplication(sys.argv) 
# set your window/mainwindow here 
sys.exit(app.exec_()) 

也許這個教程也很有幫助:Qt GUI app with python