今回の内容
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 件のコメント:
コメントを投稿