【问题标题】:wxpython unittest with modal dialog带有模态对话框的 wxpython unittest
【发布时间】:2015-03-28 21:22:53
【问题描述】:

我有一个 wxPython GUI,我正在尝试使用 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,然后在 ShowModal 上“卡住”,此时 clickOk 应该运行(由 wx.CallAfter 调用)。这似乎发生了,但由于某种原因,实际上并未处理单击事件,并且测试挂起。当我在测试中运行 MyDialog 时,事件绑定工作正常,单击 Ok 按钮时对话框关闭。

我不应该需要 app.mainloop() 来处理事件,对吧?这是怎么回事?

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    查看 Phoenix https://github.com/wxWidgets/Phoenix 中的单元测试,查看 test_dialog.py 和 wtc.py 中的基本人员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多