我已经看过关于这个主题的another question,但我无法获得适合我的信息,所以我想我会详细说明 - 我怀疑我只是近视。
我正在尝试从测试框架中运行我的GUI,这涉及在测试脚本中手动调用事件(在这种情况下是按下按钮)。到目前为止,除了其他不相关的guff之外,我还有:
# 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)
我的问题是我不知道X
和Y
应该是什么(假设其余的都没问题)。非常感谢任何帮助。
答案 0 :(得分: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
应该有效
答案 1 :(得分:1)
事实证明,因为我来自GUI Test re-jigged my GUI to run in a worker thread,我可以直接与它通信。我应该早点意识到这一点,但结果是我不需要费心将GUI测试中的事件发布到GUI,因为它们在同一个进程中运行。
相反,我现在可以直接调用事件的效果。例如,我可以调用on_button_press()
,绕过按钮的实际点击,这通常会触发wxPython中的事件。这允许我模拟用户交互和测试工作流程和输入范围,这正是我想要做的。
当然,这只能起作用,因为我在与测试套件相同的过程中运行GUI。发布事件似乎是前进的方式,并且在回答我自己的问题时,似乎自定义事件是调用按钮按下跨进程的方式。这意味着在GUI中使用某种“测试代理”来处理那些特定于测试的事件。
答案 2 :(得分: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()