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