2024-05-13 16:46:58 发布
网友
我想这一定是一个非常基本的问题,但是我在google上搜索到了死,没有一个明确的答案,所以这里是这样的:我有一个TextCtrl,我想要一个相当基本的事件序列:1)用户通过钩子或钩子将焦点移到控件上。2) 用户在textcrl中键入内容。3) 用户点击return或tab。4) 此时,代码获取textcrl中的文本,执行一些简单的处理,然后将焦点移动到制表顺序下一个控件上。在
有人能告诉我怎么做吗?在我看来这很基本,但我哪儿也找不到答案。抱歉,如果我错过了一些明显的东西。在
要使其正常工作,您需要捕获键事件并检查用户是否按了Enter或Tab键。正如前面提到的@sundar,要使tabbing在所有平台上都能正常工作,widget必须是面板的子控件。下面是一个相当简单的例子:
import wx ######################################################################## class MyPanel(wx.Panel): """""" # def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) self.text = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER) self.text.Bind(wx.EVT_KEY_DOWN, self.onEnter) btn = wx.Button(self, label="Do something") self.text.SetFocus() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.text, 0, wx.EXPAND|wx.ALL, 5) sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5) self.SetSizer(sizer) # def onEnter(self, event): """""" keycode = event.GetKeyCode() if keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER or keycode == wx.WXK_TAB: self.process_text(event=None) event.EventObject.Navigate() event.Skip() # def process_text(self, event): """ Do something with the text """ text = self.text.GetValue() print text.upper() for word in text.split(): print word ######################################################################## class MyFrame(wx.Frame): """""" # def __init__(self): """Constructor""" wx.Frame.__init__(self, None, title="TextCtrl Demo") panel = MyPanel(self) self.Show() if __name__ == "__main__": app = wx.App(False) frame = MyFrame() app.MainLoop()
这里我们绑定到wx.EVT_KEY_DOWN,并让它提取被按下的键码。然后检查keycode是Enter键还是Tab键。如果是,它将调用一个函数来处理文本,然后调用event.EventObject.Navigate(),这将导致wxPython按制表符顺序将焦点移动到下一个小部件上。在
wx.EVT_KEY_DOWN
event.EventObject.Navigate()
您可能需要阅读以下有关该主题的内容:
有关wxPython的key和char事件的详细信息,请参阅以下内容:
1.要使制表符起作用,您在窗口或单个面板上插入控件/控件必须具有以下样式标志:wxTAB_TRAVERSAL ie
class MyPanel(wx.Panel): def __init__(self, parent,id): wx.Panel.__init__(self, parent, id, wx.DefaultPosition,wx.DefaultSize, wx.RAISED_BORDER|wx.TAB_TRAVERSAL)
2。选项卡顺序由向面板或框架添加控件的顺序设置。在
3)选项卡顺序似乎也依赖于小部件的创建顺序。我想这是由于widget ID号造成的。添加到尺寸机/面板的订单似乎对我没有帮助。在
4)以下是设置控件后设置选项卡顺序的小演示:
要使其正常工作,您需要捕获键事件并检查用户是否按了Enter或Tab键。正如前面提到的@sundar,要使tabbing在所有平台上都能正常工作,widget必须是面板的子控件。下面是一个相当简单的例子:
这里我们绑定到
wx.EVT_KEY_DOWN
,并让它提取被按下的键码。然后检查keycode是Enter键还是Tab键。如果是,它将调用一个函数来处理文本,然后调用event.EventObject.Navigate()
,这将导致wxPython按制表符顺序将焦点移动到下一个小部件上。在您可能需要阅读以下有关该主题的内容:
有关wxPython的key和char事件的详细信息,请参阅以下内容:
1.要使制表符起作用,您在窗口或单个面板上插入控件/控件必须具有以下样式标志:wxTAB_TRAVERSAL ie
2。选项卡顺序由向面板或框架添加控件的顺序设置。在
3)选项卡顺序似乎也依赖于小部件的创建顺序。我想这是由于widget ID号造成的。添加到尺寸机/面板的订单似乎对我没有帮助。在
4)以下是设置控件后设置选项卡顺序的小演示:
^{pr2}$相关问题 更多 >
编程相关推荐