2013-12-12 20 views
2

我正面臨一些理解問題,因爲我正在嘗試潛入pyqt的gui編程。爲什麼我的定義在pyqt中使用exec()時不見了?

我用

exec(open("./regression.py").read()) 

我的PyQt GUI程序內調用在用戶按下幾個按鈕(這些定義regression.py一些變量)

所以如果經過我的計算是由一個腳本我在一個空的腳本中運行它,我所有的定義都可以調用(並且我在變量瀏覽器中看到它們)。

如果我嘗試在我的gui程序中運行這個腳本 - 腳本執行但如果我想重用一個變量或我在gui的另一個動作中定義的方法,這是不可能的。 執行後一切都消失了。

... 
    self.connect(self.buttonOK, 
        QtCore.SIGNAL("clicked()"), self.onOK) 

def onOK(self): 

    if self.button1.checkState(): 
     a=3 
    if self.button2.checkState(): 
     a=1 

    exec(open("./regression.py").read())# this scripts takes the value of "a" to run 
    # it prints some calculations - but everything is gone after pressing "OK" button 

app = QtGui.QApplication(sys.argv) 
dialog = MeinDialog() 
dialog.show() 

這是爲什麼?我如何找到解決方案?是我使用模塊如numpy等來分發gui和實際計算的方法嗎?

+2

如果你正在使用'exec()'*你這樣做**錯了!另外,如果沒有發佈'。regression.py'的內容,我們就不能說出什麼問題。我不明白爲什麼你不能簡單地在'。regression.py'中定義一個函數'compute(a)'並且執行'import regression; regression.compute(a)'而不是調用'exec()'。 – Bakuriu

+0

我可以,但是對於一個函數來說,清楚的是執行後所有定義的變量都不存在了......我需要一些讓腳本在其中運行的進程,以便如果另一個腳本(另一個按鈕事件)被稱爲所有之前定義的可以使用...我打開另一種方式來定義某種子函數給我的「regression.py」腳本,該腳本在每個事件(按鈕按下)上執行。在「Regression.py」中,我使用一個包含我的DATA的矩陣,這個矩陣被分解爲一個特徵和一個目標,並且使用scikit-learn建立支持向量迴歸... – Hiatus

+0

[鏈接] http://scikit-learn.org /stable/modules/generated/sklearn.svm.SVR.html查看方法...讓我們說我有一個按鈕「火車方法」..和另一個「預測方法」 - 如果在按下按鈕後我的定義已經消失我不能在推出「訓練方法」後立即使用「預測」 - 我需要運行「預測腳本」中的所有代碼並添加一行'clf.fit(X,y)',以便每個按鈕我必須複製並粘貼代碼到所需的「按鈕計算」 - – Hiatus

回答

0

exec是一個python調用。在PyQt中,你需要使用exec_()。

我很快就讀到了這個問題。我認爲問題是啓動事件回覆,而不是從另一個進程獲取變量。你可以導入你的迴歸模塊並在流程中運行它,而不是使用exec嗎?

+0

我在()裏面寫了些什麼?我得到'NameError:全局名'exec_'未定義' – Hiatus

+0

您需要創建一個QApplication(或其變體),並且exec_()是運行事件回調的QApplication的一種方法。 –

+0

好的,你能舉個例子嗎? – Hiatus

相關問題