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