首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

怎么bind event设置wxpython界面程序的焦点

2012-04-17 
如何bind event设置wxpython界面程序的焦点如图,我要光标一直在isninput输入框内,其他功能按钮也可正常使

如何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回你的控件,没有时间点上的缓冲,用了计时器后应该能避开这种问题...

热点排行