2013-12-12 2 views
2

Я столкнулся с некоторыми проблемами понимания, так как я пытаюсь погрузиться в программирование gui pyqt.Почему мои определения исчезли при использовании exec() с pyqt?

Я использую

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

внутри моей PyQt графического интерфейса программы вызвать скрипт, где мои расчеты сделаны после того, как пользователь толкнул некоторые кнопки (они определяют некоторые переменные в regression.py)

так что если Я запускаю это в пустом скрипте, все мои определения вызываются (и я вижу их в проводнике переменных).

Если я пытаюсь запустить это в своей программе gui - скрипт выполняется, но если бы я хотел повторно использовать одну переменную или метод, определенный в регрессии.py в другом действии моего 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() 

Почему это так? как я могу найти решение? мой метод плевки gui и фактических расчетов с использованием модулей, таких как numpy и так далее?

+2

Если вы используете 'exec()' *, вы делаете это ** неправильно ***! Кроме того, не публикуя содержимое './Regression.py', мы не можем сказать, что не так. Я не понимаю, почему вы не можете просто определить функцию 'compute (a)' in './Regression.py' и выполнить импортную регрессию; 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)' so для каждая кнопка мне нужно скопировать и вставить код в нужный «расчет кнопки» - – Hiatus

ответ

0

exec является вызовом python. В PyQt вам нужно использовать exec_().

[изменить] Я прочитал вопрос слишком быстро. Я думал, что проблема начинается с eventloop, не получая переменные от другого процесса. Можете ли вы импортировать свой регрессионный модуль и запустить его в процессе, вместо использования exec?

+0

Что мне нужно писать внутри()? i get 'NameError: global name' exec_ 'не определен' – Hiatus

+0

Вам нужно создать QApplication (или его вариант), а exec_() - это метод QApplication, который запускает eventloop. –

+0

ok- можете ли вы привести пример для моего дела, пожалуйста? – Hiatus

Смежные вопросы