程序在退出时崩溃

时间:2014-11-23 16:01:10

标签: python wxpython exit

我在wxPython创建了一个程序。它有一个EVT.ACTIVATE可以激活self.Focus功能。一切正常,直到我在self.Focus函数中添加一些条件。如果存在IF条件,程序会在退出时显示:'pythonw.exe'已停止工作。让我解释一下代码:

# partial code of my program

self.Bind(wx.EVT_ACTIVATE, self.Focus)

def FindButton(self, e):
        Input = self.search.GetValue()
        # starts a thread that queries a big database
        t = ProcessThread(str(Input), self.output1, self.output2, self.Object, self.container)
        t.start()

def Focus(self, e):

    # handles the paste command when window gets activated
    try:
        if self.menu_clip.IsChecked(): # this is the condition that causes problems
            self.search.SetValue('')
            self.search.Paste()
            self.FindButton(None)
    except:
        pass

查看.IsChecked函数中的Focus条件,会导致问题。想我怎么样?因为我删除IF条件程序工作正常。所以我必须以这种方式编写函数来防止错误:

def Focus(self, e):
    # handles the paste command when window gets activated
    try:
        self.search.SetValue('')
        self.search.Paste()
        self.FindButton(None)
    except:
        pass

但我需要应用这个条件才能让我的程序用户友好,为什么我的程序在退出时会停止响应这个条件?错误细节可能有所帮助,所以我附上了:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: pythonw.exe
  Application Version:  0.0.0.0
  Application Timestamp:    4f84a6ca
  Fault Module Name:    StackHash_0a9e
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp:   00000000
  Exception Code:   c0000005
  Exception Offset: 4d8dcccc
  OS Version:   6.1.7600.2.0.0.256.1
  Locale ID:    1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

1 个答案:

答案 0 :(得分:0)

好的,我自己已经为此找到了解决方案。应该以这种方式编写该函数以防止所述崩溃:

def Focus(self, e):
    # handles the paste command when window gets activated
    if e.GetActive() and self.menu_clip.IsChecked():
        self.search.SetValue('')
        self.search.Paste()
        self.FindButton(None)

在这里我添加e.GetActive,它在窗口RECEIVES焦点时返回true,但在它失去焦点时返回。 崩溃的可能原因:我认为,当我关闭窗口时,它失去了焦点,而我以前的功能不适合处理这种情况。因为窗口已经被破坏,函数应该在其上工作。也许这就是崩溃的原因。添加e.GetActive可以处理此错误。