如果使用self.Hide(),wx.Frame会隐藏,但如果self不可用则不隐藏

时间:2015-08-04 20:27:17

标签: python-2.7 wxpython hide sikuli

我有两个应用程序(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

好的,除了很多事情,我想说:

  • 这里self表示协议,而不是GUI B
  • 当参数==" EXE_SIKULI"时,您可以看到" gui.functionHide" (我不能使用self.function隐藏在这里)
  • sikuli运行正常,没有任何问题,就像通过按下GUI中的按钮执行一样
  • 问题:它不隐藏GUI B

除了CallAfter(wx.PostEvent,wx.PyCommandEvent)之外,我还阅读了很多其他内容。

任何有关隐藏GUI B的帮助都将受到赞赏。提前谢谢。

0 个答案:

没有答案