我有两个应用程序(wx.App),比如GUI A和GUI B,可以通过twisted进行通话。 B有一组Sikuli脚本,A应该能够发送一条消息来执行B中选定的Sikuli脚本。 除其他外,B有: (1)组合框选择特定的sikuli (2)运行所选择的sikuli的按钮 (3)与A交谈的扭曲协议(lineReceiver)。我可以使用self.protocol访问协议。另一方面,协议可以使用其工厂访问GUI(这是特定的扭曲,但它是gui = self.factory.gui)。有了这个,我可以设置/获取GUI属性并调用GUI方法。
因为Sikuli需要使用显示器,我需要当我想运行Sikuli时,应用程序需要是Hiden,执行Sikuli,然后应用程序需要显示。 如果我只使用B,那就行得正常,并且方法是:
def functionHide(self,event):
self.Hide()
wx.CallAfter(self.OnRunSikulis)
def OnRunSikulis(self):
try:
runSikuli(the selected sikuli) #this is not literal, but here is not the problem
except:
print "There is a problem.."
wx.CallAfter(self.functionShow)
else:
wx.CallAfter(self.functionShow)
def functionShow(self):
self.SetFocus()
self.Show(True)
好的,现在我想从A发送消息到B,以便运行Sikuli。当消息到达B时,它由其协议功能lineReceived处理。这是lineReceived的简化版本:
def lineReceived(self, line):
gui = self.factory.gui
linea= line.split("*")
parameter=linea[0]
if parameter == "ERR_NAME":
self.factory.continueTrying = False
return
elif parameter == "EXE_SIKULI":
wx.CallAfter(gui.functionHide,wx.EVT_BUTTON) #of course, for functionHide I use Bind with the execute sikuli button
return
return
好的,除了很多事情,我想说:
除了CallAfter(wx.PostEvent,wx.PyCommandEvent)之外,我还阅读了很多其他内容。
任何有关隐藏GUI B的帮助都将受到赞赏。提前谢谢。