可以說,回答你的第一個問題是肯定的!
您對wx.EVT_TEXT
有約束力,而不是更常見的wx.EVT_COMBOBOX
,我期望的結果將是觸發組合框中每個文本事件的事件,例如鍵入或取消其中的字符。
我懷疑,你真正想要的是wx.EVT_TEXT_ENTER
,只有當你按下回車鍵時纔會發出一個事件,這將允許你輸入一個不在choices
中的選擇。爲此,您需要使用style=wx.TE_PROCESS_ENTER
選項創建組合框。
的組合框的事件有:
EVT_COMBOBOX: Process a wxEVT_COMBOBOX event, when an item on the list is selected. Note that calling GetValue returns the new value of selection.
EVT_TEXT: Process a wxEVT_TEXT event, when the combobox text changes.
EVT_TEXT_ENTER: Process a wxEVT_TEXT_ENTER event, when RETURN is pressed in the combobox (notice that the combobox must have been created with wx.TE_PROCESS_ENTER style to receive this event).
EVT_COMBOBOX_DROPDOWN: Process a wxEVT_COMBOBOX_DROPDOWN event, which is generated when the list box part of the combo box is shown (drops down). Notice that this event is only supported by wxMSW, wxGTK with GTK+ 2.10 or later, and OSX/Cocoa.
EVT_COMBOBOX_CLOSEUP: Process a wxEVT_COMBOBOX_CLOSEUP event, which is generated when the list box of the combo box disappears (closes up). This event is only generated for the same platforms as wxEVT_COMBOBOX_DROPDOWN above. Also note that only wxMSW and OSX/Cocoa support adding or deleting items in this event.
編輯: 我看了一下你對對方的回答的註釋中引用的代碼。這有點令人困惑,因爲它指的是self.ignoreEvtText
,這看起來好像與event
或EVT_TEXT
有某種關係。
它不是!編碼器設置變量了自己,
self.Bind(wx.EVT_TEXT, self.EvtText)
self.Bind(wx.EVT_CHAR, self.EvtChar)
self.Bind(wx.EVT_COMBOBOX, self.EvtCombobox)
self.ignoreEvtText = False
,並用它來操縱會發生什麼,因爲他們勢必3個事件相同的組合框。
如果用戶從選項wx.EVT_COMBOBOX
中選擇一個項目,或者用戶按back tab
(鍵碼8)wx.EVT_CHAR
,則忽略wx.EVT_TEXT
事件。
我希望能澄清一些事情。
非常感謝您的回答。我意識到,捕捉此事件並操縱其中的文本以進行自動完成時,文本操作可觸發第二個事件。我對嗎?你的意思是?在你答案的第一部分中,我並沒有完全理解你對第一個問題說「是」的含義。不知何故,我創建了這個問題,因爲我有雙重事件的經驗,例如停靠時的aui.EVT_AUI_PERSPECTIVE_CHANGED事件。但我想我應該爲這個問題提出另一個問題,因爲它超出了範圍。 – Eddmik
你在這篇文章中的第一個問題是「這是一個預期的行爲?」就是這樣,我正在迴應。後來我意識到你在回答其他答案時發佈了一個例子,我在編輯中回覆了這個答案。我指的是在綁定到'wx.EVT_TEXT'後,由於文本操作觸發了可能的多個事件,就像你說的那樣。 –