【问题标题】:How do I manually trigger wx.Frame close event (wxPython)?如何手动触发 wx.Frame 关闭事件(wxPython)?
【发布时间】:2017-04-05 19:24:20
【问题描述】:

我想记录错误并退出 wxPython 脚本,为此我需要触发 wx.EVT_BUTTON.typeId 事件 ID:wx.ID_CLOSE

我定义了 OnExit:

b_exit = wx.Button(self.statusBar, wx.ID_CLOSE, "Exit")
b_exit.Bind(wx.EVT_BUTTON, self.OnExit)
...
def OnExit(self, evt)
   self.Destroy()

如何从我的代码中生成和传播 wx.ID_CLOSE 事件?

我试过了,还是不行:

wx.PyCommandEvent(wx.EVT_BUTTON.typeId, wx.ID_CLOSE)

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    将OnExit 更改为

    def OnExit(self, evt)
       self.Close()
    

    将触发 EVT_CLOSE 事件。确保从绑定的 close 方法调用 event.Skip()。框架关闭后,wx.Frame 会自动调用 Destroy。

    旁注:要手动触发事件,请参阅wx.PostEvent

    【讨论】:

    • 你有“手动触发事件”的工作示例吗?
    • 那个链接可以。页面的一半。搜索 wx.PostEvent。您创建事件,然后调用 wx.PostEvent(target_window, evt)
    • 链接是文档,我可以找到文档。我需要几行代码来回答我的问题
    • 任何时候,很高兴我能帮上忙
    【解决方案2】:

    看不到您的代码,很难知道。
    希望这个定义你自己的事件的小例子能让你解决它。我不得不承认,一开始我花了一段时间才明白这一点。

    import wx
    import wx.lib.newevent
    NewEvent, EVT_MY_EVENT = wx.lib.newevent.NewEvent()
    CMD_ID = wx.NewId()
    class MyApp(wx.App):
        def OnInit(self):
            self.frame = MyFrame()
            return True
    
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self,None, title="Window", pos = (100,150), size =(250,200))
            sizer = wx.BoxSizer()
            self.button1 = wx.Button(self, CMD_ID, label="Button 1")
            sizer.Add(self.button1)
            self.Bind(wx.EVT_BUTTON, self.OnButton,id=CMD_ID)
            self.Bind(EVT_MY_EVENT, self.OnMyEvent)
            self.Layout()
            self.Show()
    
        def OnButton(self, event):
            id = event.GetId()
            event = NewEvent(action="perform a defined action",button=id,other_setting=1234)
            wx.PostEvent(self, event)
    
        def OnMyEvent(self, event):
            button = event.button
            action = event.action
            other = event.other_setting
            print "event button number", button
            print "event action request", action
            print "event other", other
    
    if __name__ == "__main__":
        app = MyApp()
        app.MainLoop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多