187 if os.path.exists(pyfile): |
187 if os.path.exists(pyfile): |
188 try: |
188 try: |
189 # TODO handle exceptions in runtime.py |
189 # TODO handle exceptions in runtime.py |
190 # pyfile may redefine _runtime_cleanup |
190 # pyfile may redefine _runtime_cleanup |
191 # or even call _PythonThreadProc itself. |
191 # or even call _PythonThreadProc itself. |
192 if os.path.exists(hmifile): |
|
193 execfile(hmifile, self.python_threads_vars) |
|
194 execfile(pyfile, self.python_threads_vars) |
192 execfile(pyfile, self.python_threads_vars) |
195 try: |
|
196 if self.python_threads_vars.has_key('wx'): |
|
197 wx = self.python_threads_vars['wx'] |
|
198 # try to instanciate the first frame found. |
|
199 for name, obj in self.python_threads_vars.iteritems(): |
|
200 # obj is a class |
|
201 if type(obj)==type(type) and issubclass(obj,wx.Frame): |
|
202 def create_frame(): |
|
203 self.hmi_frame = obj(None) |
|
204 self.python_threads_vars[name] = self.hmi_frame |
|
205 # keep track of class... never know |
|
206 self.python_threads_vars['Class_'+name] = obj |
|
207 self.hmi_frame.Bind(wx.EVT_CLOSE, OnCloseFrame) |
|
208 self.hmi_frame.Show() |
|
209 |
|
210 def OnCloseFrame(evt): |
|
211 self.hmi_frame.Destroy() |
|
212 self.hmi_frame = None |
|
213 wx.MessageBox("Please stop PLC to close") |
|
214 #wx.CallAfter(self.StopPLC) |
|
215 create_frame() |
|
216 #evt.Skip() |
|
217 create_frame() |
|
218 break |
|
219 except: |
|
220 PLCprint(traceback.format_exc()) |
|
221 except: |
193 except: |
222 PLCprint(traceback.format_exc()) |
194 PLCprint(traceback.format_exc()) |
223 |
195 if os.path.exists(hmifile): |
|
196 try: |
|
197 execfile(hmifile, self.python_threads_vars) |
|
198 if self.python_threads_vars.has_key('wx'): |
|
199 wx = self.python_threads_vars['wx'] |
|
200 # try to instanciate the first frame found. |
|
201 for name, obj in self.python_threads_vars.iteritems(): |
|
202 # obj is a class |
|
203 if type(obj)==type(type) and issubclass(obj,wx.Frame): |
|
204 def create_frame(): |
|
205 self.hmi_frame = obj(None) |
|
206 self.python_threads_vars[name] = self.hmi_frame |
|
207 # keep track of class... never know |
|
208 self.python_threads_vars['Class_'+name] = obj |
|
209 self.hmi_frame.Bind(wx.EVT_CLOSE, OnCloseFrame) |
|
210 self.hmi_frame.Show() |
|
211 |
|
212 def OnCloseFrame(evt): |
|
213 self.hmi_frame.Destroy() |
|
214 self.hmi_frame = None |
|
215 wx.MessageBox("Please stop PLC to close") |
|
216 #wx.CallAfter(self.StopPLC) |
|
217 create_frame() |
|
218 #evt.Skip() |
|
219 create_frame() |
|
220 break |
|
221 except: |
|
222 PLCprint(traceback.format_exc()) |
|
223 |
224 def BeginRuntimePy(self): |
224 def BeginRuntimePy(self): |
225 runtime_begin = self.python_threads_vars.get("_runtime_begin",None) |
225 runtime_begin = self.python_threads_vars.get("_runtime_begin",None) |
226 if runtime_begin is not None: |
226 if runtime_begin is not None: |
227 self.evaluator(runtime_begin) |
227 self.evaluator(runtime_begin) |
228 |
228 |