我正面臨一些理解問題,因爲我正在嘗試潛入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和實際計算的方法嗎?
如果你正在使用'exec()'*你這樣做**錯了!另外,如果沒有發佈'。regression.py'的內容,我們就不能說出什麼問題。我不明白爲什麼你不能簡單地在'。regression.py'中定義一個函數'compute(a)'並且執行'import regression; regression.compute(a)'而不是調用'exec()'。 – Bakuriu
我可以,但是對於一個函數來說,清楚的是執行後所有定義的變量都不存在了......我需要一些讓腳本在其中運行的進程,以便如果另一個腳本(另一個按鈕事件)被稱爲所有之前定義的可以使用...我打開另一種方式來定義某種子函數給我的「regression.py」腳本,該腳本在每個事件(按鈕按下)上執行。在「Regression.py」中,我使用一個包含我的DATA的矩陣,這個矩陣被分解爲一個特徵和一個目標,並且使用scikit-learn建立支持向量迴歸... – Hiatus
[鏈接] http://scikit-learn.org /stable/modules/generated/sklearn.svm.SVR.html查看方法...讓我們說我有一個按鈕「火車方法」..和另一個「預測方法」 - 如果在按下按鈕後我的定義已經消失我不能在推出「訓練方法」後立即使用「預測」 - 我需要運行「預測腳本」中的所有代碼並添加一行'clf.fit(X,y)',以便每個按鈕我必須複製並粘貼代碼到所需的「按鈕計算」 - – Hiatus