3

我已经看到有关此主题的另一个问题,但我无法完全获得适合我的信息,所以我想我会提供我的细节 - 我怀疑我只是短视。

我正在尝试从测试框架中练习我的 GUI,这涉及在测试脚本中手动调用事件(在本例中为按钮按下)。到目前为止,除了其他不相关的废话,我有:

# In GUI class:

self.button_1 = wx.Button(self, id=wx.ID_ANY, label="Button 1")
self.button_1.Bind(wx.EVT_BUTTON, self.button_1)

# In GUI Test class:

event = wx.PyCommandEvent(X, Y)
wx.PostEvent(get_gui_instance(), event)

我的问题是我不知道应该是什么(假设其余的都可以)XY任何帮助是极大的赞赏。

4

3 回答 3

5
btnInfo = wx.Button(self,-1,"Some Button")

evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId,btnInfo.GetId())
wx.PostEvent(self, evt)  #attach event to self ... alternatively maybe attach to btnInfo

应该管用

于 2012-10-08T17:51:36.040 回答
1

所以事实证明,因为我已经重新调整了我的 GUI 以在GUI Test 的工作线程中运行,所以我可以直接与它通信。我应该早点意识到这一点,但结果是我不需要费心将事件从 GUI 测试发布到 GUI,因为它们在同一个进程中运行。

相反,我现在可以直接调用事件的效果。例如,我可以调用on_button_press(),绕过按钮的实际单击,这通常会触发 wxPython 中的事件。这使我能够模拟用户交互并测试工作流程和输入范围,这正是我想要做的。

当然,这只是因为我在与测试套件相同的进程中运行我的 GUI。否则,发布事件似乎是前进的方向,在回答我自己的问题时,似乎自定义事件是跨进程调用按钮按下的方式。这意味着在 GUI 中使用某种“测试代理”来处理那些特定于测试的事件。

于 2012-10-09T10:31:01.947 回答
0
import wx

class MessageDialog(wx.Dialog):
    def __init__(self, message, title, tiempo = 2000):

        style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
        super(MessageDialog, self).__init__(None, -1, title, style=style)
        text = wx.StaticText(self, -1, message)

        fuente = wx.Font(pointSize = 20, 
                     family = wx.DEFAULT, 
                     style = wx.NORMAL, 
                     weight = wx.LIGHT, 
                     underline=False, 
                     faceName="", 
                     encoding=wx.FONTENCODING_DEFAULT)        
        text.SetFont(fuente)




        self.ok = wx.Button(self, wx.ID_OK, "OK")
        sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(text,0,wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL,5)
        sizer.Add(self.ok, 0, wx.EXPAND|wx.ALL, 5)
        self.SetSizerAndFit(sizer)
        color = "WHEAT"
        self.SetBackgroundColour(color)
        self.Center()
        self.Refresh()
        wx.FutureCall(tiempo,self.salir_ok)

    def salir_ok(self):
        par_btn = getattr(self, "ok")
        evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId, par_btn.GetId())
        wx.PostEvent(self, evt)
        return

if __name__ == '__main__':
    app = wx.App()
    dialog = MessageDialog( 'Teclee el nombre del proveedor', 'Proveedor')

    dialog.ShowModal()
    dialog.Destroy()
    app.MainLoop()
于 2016-11-23T23:32:19.607 回答