如何bind event设置wxpython界面程序的焦点
如图,我要光标一直在isninput输入框内,其他功能按钮也可正常使用。
如果如下bind的,
self.Bind(wx.EVT_BUTTON, self.OnClickSet, self.cfgBtn)
self.Bind(wx.EVT_TEXT_ENTER, self.OnInputISN, self.isnText)
self.Bind(wx.EVT_IDLE, self.OnIsnFocus)
这样可以实现空闲时focus在我的输入框内,可是其他的工具按钮,如set就无法使用啦,点击毫无反应
注:我的工具按钮是用sizer组合出来的,不是使用addtool空间
如果 将self.Bind(wx.EVT_IDLE, self.OnIsnFocus)
改为self.Bind(wx.EVT_IDLE, self.OnIsnFocus,self.isnText) ,可是鼠标在界面的任何操作都会影响foucs,导致foucs失效。但是 set 等其他 按钮 一直是 可用的 ,没懂为何会 如此
也试过self.isnText.SetFoucs在主程序内执行都有效,在线程中有传入frame到线程中,frame.isnText.SetFoucs也无效,是不是需要其他的界面刷新动作?
请求帮助,谢谢
[解决办法]
定时器嘛,譬如用wx.CallLater这个是一发的计时器,可以试试在Bind后写上,类似:
self.Bind(wx.EVT_IDLE, self.OnIsnFocus)
self.timer = wx.CallLater(1000, self.isnText.SetFoucs)
这样开始满1秒就会执行一次setfocus,然后在idle事件绑定的函数里再次启动计时器,类似:
def OnIsnFocus(self, e):
if not self.timer.IsRunning() and self.FindFocus() != self.isnText:
self.timer.Start()
...
原来按下其它按钮失效,估计是马上优先setfocus回你的控件,没有时间点上的缓冲,用了计时器后应该能避开这种问题...