gpt4 book ai didi

wxpython - 关于 event.Skip()

转载 作者:行者123 更新时间:2023-12-01 12:52:09 24 4
gpt4 key购买 nike

我想调用 OnstaticDown,并使用 event.Skip() 调用它的父控件 onPanelDown

但是只调用了OnstaticDown,我不明白为什么。为什么 static 的父面板没有收到事件?

我的代码:

 self.panel.Bind(wx.EVT_LEFT_DOWN,self.onPanelDown)
self.static = wx.StaticText(self.panel, wx.NewId(), "First Name",pos=(10, 50),size=(100,100))
self.static.Bind(wx.EVT_LEFT_DOWN, self.OnstaticDown)

def onPanelDown(self,event):
print 'panel-------------22'
def OnstaticDown(self,event):
print 'static============11'
event.Skip()

最佳答案

event.Skip() 将调用控件的默认处理程序(即 StaticText)。不过,我不认为静态文本有默认处理程序,因为它不是设计用于与之交互的,它只是用于显示文本的标签。

你可以在静态处理后将事件发布到面板,wx.PostEvent(self.panel,event) 或者我不认为只是为了传递它 self.onPanelDown(event) 尽管它不太适合更改。

你总是可以创建一个函数来传递/发布一个事件给父控件

def PostToParent(control,event):
wx.PostEvent(control.GetParent(),event)


编辑:这不是它的工作方式,只有某些类型的事件传播到父窗口小部件(wx.CommandEvent 层次结构中的事件,鼠标事件不是其中的一部分)。尝试注释掉静态文本上的绑定(bind),如果您在其上单击鼠标右键,则不会触发左下方的面板,因为您单击的是静态文本,而不是面板。 event.Skip() 将只标记事件并允许在运行您的处理程序后传播到其他绑定(bind),如果您不这样做,则事件不会发生任何其他事情。

最明显的例子是,如果您关闭一个窗口,框架会发出一个 EVT_CLOSE 事件,wx 将拾取并关闭该窗口。如果您将方法绑定(bind)到 EVT_CLOSE,它将在底层 wx 事件处理程序之前触发。如果你不调用 event.Skip 事件将永远不会到达 wx 处理程序并且当你尝试关闭它时框架不会关闭,但如果你调用 event.Skip 它将在您之后由 wx 事件处理程序处理,并关闭框架。

另一方面,

wx.PostEvent 是一种将事件发送到特定小部件的方法,并将任何绑定(bind)绑定(bind)到该特定事件,处理该事件。在这种情况下,将左下事件转发到面板与您自己单击面板具有相同的效果。

关于wxpython - 关于 event.Skip(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11606068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com