带模态对话框的wxpython unittest

2024-09-30 06:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个wxpythongui,我正试图使用unittest测试我的一些模态对话框。我试着按照这里给出的例子(你必须向下滚动到页面的底部):http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython,但它对我不起作用。它只是在中间冻结。在

我将wiki中的代码修改为:

btn_id = wx.NewId()

class MyDialog(wx.Dialog):
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, 'Test')
        self.btn = wx.Button(self, btn_id, label="OK!!")
        self.btn.Bind(wx.EVT_BUTTON, self.close_dialog)

    def close_dialog(self, event):
        print 'close me'

class TestMyDialog(unittest.TestCase):

    def setUp(self):
        self.app = wx.App()
        self.frame = wx.Frame(None)
        self.frame.Show()

    def tearDown(self):
        wx.CallAfter(self.app.Exit)
        self.app.MainLoop()

    def testDialog(self):
        def clickOK():
            clickEvent = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, btn_id)
            self.dlg.ProcessEvent(clickEvent)
            print 'finished clickOK'

        wx.CallAfter(clickOK)
        self.ShowDialog()

    def ShowDialog(self):
        self.dlg = MyDialog(self.frame)
        self.dlg.ShowModal()
        self.dlg.Destroy()

if __name__ == '__main__':
    unittest.main()

据我所知,应该发生的是调用ShowDialog,然后在showmodel上“卡住”,此时clickOk应该运行(由调用wx.CallAfter公司). 这似乎发生了,但由于某些原因,click事件实际上没有得到处理,测试也挂起了。当我运行MyDialog not in testing时,事件绑定工作正常,当单击Ok按钮时对话框关闭。在

我不需要应用程序主循环()以便能够处理事件,对吗?这是怎么回事?在


Tags: selfidappclosedefunittestframe对话框

热门问题