Я пытаюсь запустить строку кода, когда пользователь нажимает на textCtrl. Конечной целью является выделение содержимого окна при нажатии. Я знаю, что это возможно с помощью wx.EVT_SET_FOCUS, но это либо неправильно, либо я неправильно реализую это. Вот мой код:Как написать событие фокуса wxPython textCtrl
self.m_textCtrl1 = wx.TextCtrl(self.m_panel2, wx.ID_ANY, wx.EmptyString,
wx.DefaultPosition, wx.Size(100,-1), wx.TE_LEFT)
self.m_textCtrl1.SetMaxLength(8)
self.m_textCtrl1.SetMinSize(wx.Size(100,-1))
self.m_textCtrl1.SetMaxSize(wx.Size(100,-1))
self.m_textCtrl1.Bind(wx.EVT_SET_FOCUS, self.highlightText, self.m_textCtrl1)
Этот код может успешно стрелять HighlightText, когда я хочу его, но по какой-то причине, курсор удаляется из textCtrl, оставляя пользователь не в состоянии выбрать его пятно, выделение или забой , Мы ценим любые предложения. Как примечание, есть ли способ сделать это в wxFormBuilder? Я построил свое приложение, используя его, но не смог добавить фокусное событие. Кажется, единственные фокусные события, которые он предлагает, для всего окна.
EDIT 9/19/14: Майк, вот мой автоматически wxFormBuilder код в gui.py
:
class OrderNumEntry (wx.Frame):
def __init__(self, parent):
# there's a lot more stuff here, but it's irrelevant
self.m_textCtrl1.Bind(wx.EVT_SET_FOCUS, self.highlightText)
def __del__(self):
pass
# Virtual event handlers, overide them in your derived class
def highlightText(self, event):
event.Skip()
... и вот обработчик события, который я написал
import wx, gui
class OrderFrame(gui.OrderNumEntry):
def __init__(self, parent):
gui.OrderNumEntry.__init__(self, parent)
# again, a lot more irrelevant stuff here
def highlightText(self, event):
print 'test'
событие отлично работает (как в тесте, которое напечатано, когда я его хочу), но я не могу выделить текст, и я не вижу своего курсора.
Ваш последний пример не имеет 'событие. Skip() 'в обработчиках событий, поэтому вы не можете выделить текст и т. Д. –
Вы правы, сэр. Я предположил, что это было в виртуальном обработчике, что было достаточно хорошо, но теперь, когда я думаю об этом, который все равно переопределяется. Рекомендуется ли это для всех обработчиков событий? Все мои другие события отлично справились с этим. – TboneH
Вам нужно только событие event.Skip(), если событие должно распространяться на цепочку событий. В этом случае вы хотите, чтобы событие продолжалось, чтобы вы могли нормально использовать виджет. В большинстве случаев вам не нужно вызывать Skip(), потому что обработчик событий, который вы определили, делает все, что вы хотите. –