今回の内容
TextCtrlのマウス位置の取得にはGetInsertionPoint()がありますが、それは何文字目という感じですね。自分が取得したいのは、[行,列]という形式です。これにはとても便利な関数がありました。
wx.TextCtrl.PositionToXY
これが超便利な関数です。GetInsertionPoint()で取得できる位置を行、列の形式に変換してくれるのです。
戻り値は[bool,int,int]みたいな感じです。一個目のboolは何なのか分かりません。
サンプルコード
import sys import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"サンプル") panel = wx.Panel(self,-1) self.textctrl = wx.TextCtrl(panel,-1,"テスト\nテキスト",size=(300,80),style=wx.TE_MULTILINE) button = wx.Button(panel,-1,"取得する",pos=(10,110)) button.Bind(wx.EVT_BUTTON,self.onButton) def onButton(self,event=None): #ここ重要! point = self.textctrl.GetInsertionPoint() pos = self.textctrl.PositionToXY(point) wx.MessageBox("列:" + str(pos[1]) + "行:" + str(pos[2]+1),"タイトル") app = wx.App(0) MyFrame().Show(True) app.MainLoop()デフォルトだと一番最初の行が0になってしまいますので、そこを+1にしていいます。
テキストエディタ作りたいならStyledTextCtrl!
テキストエディタ(メモ帳)作りたいならStyledTextCtrkを使いましょう。これなら色分けもできますし、行番号表示もできますし、エディタとしての機能は完璧なほど持っています。
まだこのブログでは紹介していませんが、いつかは紹介する予定です!
動作環境:
Python 3.9.1
wxPython 4.1.1a1
Windows 10
おすすめ記事
wxPythonでメッセージボックスを表示させる
wxPythonのTextCtrlで一部の文字の色を変更 / 文字を強調
wxPython テキストボックスを使ったサンプル / wx.TextCtrl Example
0 件のコメント:
コメントを投稿