TextCtrl / Styled TextCtrl内のキャレットの位置が変更された場合、どのようなイベントが呼び出されますか?ステータスバーにキャレットの現在の位置を表示するには、イベントをバインドする必要があります。
質問する
1533 次
4 に答える
2
wx.EVT_KEY_UP
次のように、イベントをwx.TextCtrl
オブジェクト
にバインドしてみてください。
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Show Caret Position", size=(400, 140))
panel = wx.Panel(self, wx.ID_ANY)
sizer = wx.BoxSizer(wx.VERTICAL)
text = wx.StaticText(panel, -1, "Text:", (10, 22))
self.textCtrl = wx.TextCtrl(
panel,
-1, "",
(50,5),
size=(250, 50),
style=wx.TE_MULTILINE
)
self.textCtrl.SetInsertionPoint(0)
self.textCtrl.Bind(wx.EVT_KEY_UP,self.onTextKeyEvent)
self.textCtrl.Bind(wx.EVT_LEFT_UP,self.onTextKeyEvent)
self.statusbar = self.CreateStatusBar(1)
panel.SetSizerAndFit(sizer, wx.VERTICAL)
def onTextKeyEvent(self, event):
statusText = "Caret Position: "+str(self.textCtrl.GetInsertionPoint())
self.SetStatusText(statusText,0)
event.Skip()
#Run application
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm()
frame.Show()
app.MainLoop()
+を使用してWindows 7
環境でテストしました。Python 2.7
wxPython 2.8
于 2012-04-30T19:29:19.170 に答える
1
@Tariq M Nasimコードの問題は、現在のキャレット位置ではなく、実際に最後の位置を提供することです。私が見つけた最も簡単な方法は、イベントチェーンがすでに存在している間に新しいイベントを投稿して、新しいイベントがキューの最後のイベントとして処理されるようにすることです。
# create event class as global
import wx.lib.newevent
SomeNewEvent, EVT_SOME_NEW_EVENT = wx.lib.newevent.NewEvent()
# then bind the events in the constructor or somewhere
self.text_ctrl.Bind(wx.EVT_CHAR, self.onKeyDownHandler)
self.text_ctrl.Bind(wx.EVT_LEFT_DOWN, self.onKeyDownHandler)
self.text_ctrl.Bind(wx.EVT_RIGHT_UP, self.onKeyDownHandler)
# bind also new event handler but
self.text_ctrl.Bind(EVT_SOME_NEW_EVENT , self.onKeyDownAction)
# then define the handlers
def onKeyDownAction(self, evt):
print("Insertion point {}".format(self.text_ctrl.GetInsertionPoint()))
evt.Skip()
def onKeyDownHandler(self, evt):
evt.Skip()
# post the new event so it will be handled later
wx.PostEvent(self.text_ctrl, SomeNewEvent())
このようにして、onKeyDownActionで取得する挿入ポイントは適切です。
于 2019-11-30T12:18:36.043 に答える
0
そのようなイベントはないと思いますが、wx.EVT_SET_CURSORを試すことができます。または、wx.EVT_CHARまたはEVT_KEY_ *イベントの1つをキャッチし、TextCtrlのGetInsertionPoint()メソッドを使用して、カーソルがどこにあるかを知ることができます。マウスイベントを使用してテキストコントロールをクリックするときにも、メソッドを呼び出す必要がある場合があります。
于 2012-04-30T14:50:04.853 に答える
0
マウスがウィンドウ内にいつ配置されているかを知るために、wx.EVT_ENTER_WINDOWをバインドできます(ここを参照) 。
于 2017-03-29T11:36:01.267 に答える