mieki256's diary



2012/09/25(火) [n年前の日記]

#1 [python] QTextEdit上で文字列挿入

PyQt勉強中なわけだけど、 _QTextEdit で文字列挿入などの処理をしたいなと。

コピー、カット、貼り付け、全選択は、.copy()、.cut()、.paste()、.selectAll() があるので問題無し。.clear() で全削除もできるけど、これを使うと「元に戻す」= .undo() の履歴も全て消えるので注意。

現在のカーソル位置に文字列を挿入したいだけなら、.insertPlainText("文字列") を使えばいい。

カーソル位置を少し変更したいなら、.moveCursor() が使える。引数に、 _QTextCursor.MoveOperation を渡せば、行頭移動、行末移動等、カーソル位置を変えられる。.moveCursor(QtGui.QTextCursor.StartOfLine) なら行頭に移動、みたいな。

選択範囲がある場合の手順がよく分からず。どうやら、.textCursor() を呼ぶことで _QTextCursor を取得して、それを使ってどうにかする、のかな?

以下は、QTextCursor を使ってできること。 そんな感じっぽい。間違ってるかもしれんけど。いや、一応手元ではそういう感じで実現できているのだけど。もっと上手いやり方があるのかもしれない。

スクリプト側から選択範囲を作れたら、もう少し色々できるのかもしれんけど。まだそこまで分かってない。英語はちんぷんかんぷんなので。

一応、ソースコードの断片をメモ。
    def ins_put(self, mark):
        """行中で単語をmarkdown用記号で挟み込む"""
        cursor = self.ui.editor_window.textCursor()
        if cursor.hasSelection():
            # 選択範囲有り
            selstr = cursor.selectedText()    # 選択範囲の文字列を取得
            cursor.beginEditBlock()
            cursor.deleteChar()                            # 選択範囲を削除
            cursor.insertText(mark + selstr + mark)        # 文字列挿入
            self.ui.editor_window.setTextCursor(cursor)    # カーソル位置を反映
            cursor.endEditBlock()
        else:
            # 選択範囲無し
            self.ui.editor_window.insertPlainText(mark + "Text" + mark)
editor_window てのは、QTextEdit の objectName。

以上です。

過去ログ表示

Prev - 2012/09 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project