0
我想有一个按钮开始执行一个文件,另一个按钮停止执行。下面的代码不起作用,文件继续执行。 (在这种情况下,文件只是一个循环,不断打印出“hello world”)。我怎样才能达到我想要的?使用按钮按下停止文件执行
import wx, sys
from threading import Thread
import time
class mywxframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None)
pnl = wx.Panel(self)
szr = wx.BoxSizer(wx.VERTICAL)
pnl.SetSizer(szr)
szr2 = self.sizer2(pnl)
szr.Add(szr2, 1, wx.ALL|wx.EXPAND, 10)
log = wx.TextCtrl(pnl, -1, style= wx.TE_MULTILINE, size = (300, -1))
szr.Add(log, 0, wx.ALL, 10)
btn3 = wx.Button(pnl, -1, "Stop")
btn3.Bind(wx.EVT_BUTTON, self.OnStop)
szr.Add(btn3, 0, wx.ALL, 10)
self.CreateStatusBar()
redir = RedirectText(log)
sys.stdout=redir
szr.Fit(self)
self.Show()
def sizer2(self, panel):
sizer = wx.BoxSizer(wx.HORIZONTAL)
self.tc2 = wx.TextCtrl(panel, -1, 'Set Range', size = (100, -1))
btn2 = wx.Button(panel, -1, "OK",)
self.Bind(wx.EVT_BUTTON, self.OnStart, btn2)
sizer.Add(self.tc2, 0, wx.ALL, 10)
sizer.Add(btn2, 0, wx.ALL, 10)
return sizer
def OnStart(self, event):
our_thread = Thread(target = self.WorkerThread)
our_thread.start()
def OnStop(self, event):
self.dead = True
def WorkerThread(self):
self.dead = False
while (not self.dead):
execfile("P:\Computing and networking\Python\Learning programs\hello_world.py")
if self.dead:
break
print "aborting"
class RedirectText(object):
def __init__(self, aWxTextCtrl):
self.out=aWxTextCtrl
def write(self, string):
wx.CallAfter(self.out.WriteText, string)
app = wx.App()
frm = mywxframe()
app.MainLoop()
我尝试了你的建议,但是按下停止按钮后,执行的文件仍然继续执行。这段代码可以使用execfile命令吗? – user3403418
它应该。我只是尝试在线程类的** run **方法中用** execfile(“hi.py”)**替换我的打印语句,并且它对我很有用。 –
以任何方式做你的hi.py循环?我只是复制并粘贴你的代码,添加了我的循环文件,并得到了相同的结果。该文件不会停止执行。 – user3403418