문제

나는 이것이 매우 기본적인 질문임에 틀림없다고 생각하지만, 나는 명확한 대답 없이 그것을 구글에서 검색해 보았습니다. 그래서 다음과 같습니다:TextCtrl이 있고 매우 기본적인 이벤트 시퀀스를 원합니다.1) 사용자는 후크 또는 사기꾼에 의해 컨트롤로 초점을 이동합니다.2) 사용자가 TextCtrl에 무언가를 입력합니다.3) 사용자가 리턴이나 탭을 쳤습니다.4) 이 시점에서 코드는 TextCtrl의 텍스트를 잡고 몇 가지 간단한 처리를 수행한 다음 탭 순서에서 다음 컨트롤로 포커스를 이동합니다.

누구든지 이 작업을 수행하는 방법을 말해 줄 수 있습니까?나에게는 매우 기본적인 것 같지만 어디에서도 답을 찾을 수 없습니다.제가 분명한 것을 놓쳤다면 죄송합니다.

도움이 되었습니까?

해결책

이것이 제대로 작동하려면 주요 이벤트를 포착하고 사용자가 Enter 또는 Tab 키를 눌렀는지 확인해야 합니다.이미 언급한 @sundar와 같이 탭 기능이 모든 플랫폼에서 올바르게 작동하려면 위젯이 패널의 하위 항목이어야 합니다.다음은 매우 간단한 예입니다.

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 누른 키코드를 추출하도록 합니다.그런 다음 키코드가 Enter 키인지 Tab 키인지 확인합니다.그렇다면 텍스트를 처리하는 함수를 호출한 다음 호출합니다. event.EventObject.Navigate(), 그러면 wxPython이 탭 순서에서 다음 위젯으로 포커스를 이동하게 됩니다.

해당 주제에 대해 다음 내용을 읽어 볼 수도 있습니다.

wxPython의 키 및 문자 이벤트에 대한 자세한 내용은 다음을 참조하세요.

다른 팁

1. 탭을 위해 탭을 위해 탭, 창 또는 개별 패널을 사용하면 PLONK 컨트롤 / 가로는 스타일 플래그의 일부로 다음과 같이하십시오. 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) 탭 순서는 또한 주문 위젯이 생성되는 순서에 의존하는 것 같습니다.나는 이것이 위젯 ID 번호로 인한 것이라고 가정합니다.시체 / 패널에 추가 된 순서는 나를 도울 것 같지 않았습니다.

4) 컨트롤이 설정되면 약간의 데모지 설정 탭 순서가 있습니다.

order = (control1, control2, control3, ...)
for i in xrange(len(order) - 1):
   order[i+1].MoveAfterInTabOrder(order[i])
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top