我先调查了一下,没能找到问题的答案。我正在尝试运行我的另一个程序,它与wxpython用Python编写的GUI并行。我要强调的def是def“startsumo”与def“onsuraskphase3(event):”并行。问题是,每当我点击“button2”时,它的功能是运行另一个由子进程调用的GUI,那么我就不能同时点击bmp按钮了。我所知道的是,这是一个顺序程序,我必须找到一种并行的方法来完成它,而不是一个序列。请帮忙。在
我有这样的东西:
class top(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'Frane aka window', size=(500,500))
panel=wx.Panel(self)
button=wx.Button(panel,label="exit",pos=(10,10),size=(60,60))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
self.Bind(wx.EVT_CLOSE, self.closewindow)
button2=wx.Button(panel,label="START_SUMO",pos=(100,10),size=(100,60))
self.Bind(wx.EVT_BUTTON, self.startsumo, button2)
def onSurasakPhase3(event):
print "surasak phase 3 is selected"
bmp = wx.Bitmap("surasak_phase3.png", wx.BITMAP_TYPE_ANY)
buttonOnSurasakPhase3 = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bmp,
size=(bmp.GetWidth(), bmp.GetHeight()))
buttonOnSurasakPhase3.Bind(wx.EVT_BUTTON, onSurasakPhase3)
buttonOnSurasakPhase3.SetPosition((2*(bmp.GetWidth())+20,30))
def startsumo(self,event):
def run():
traci.init(PORT)
step = 0
while step < 15200:
traci.simulationStep()
step += 1
sumoProcess = subprocess.Popen(["sumo-gui ", "-c", "sathon_s_lefthand.sumo.cfg ","-a", "TESTTTT.add.xml ",
"--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr)
run()
sumoProcess.wait()
def closebutton(self,event):
self.Close(True)
def closewindow(self, event):
self.Destroy()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=top(parent=None,id=-1)
frame.Show()
app.MainLoop()
由于调用sumoproces.等等()在startsumo()中。如果您希望您的GUI能够响应,那么您不需要在那里等待。在
请尝试以下替换方法来替换您的
def startsumo
它应该在不影响当前进程的情况下运行。
sumoProcess将包含正在运行的程序的pid,例如您需要终止它。在
相关问题 更多 >
编程相关推荐