web-dev-qa-db-ja.com

クイックアプリでテキストと画像を表示および編集する

画像とテキスト(画像のサイズ変更とテキスト編集)を表示できる必要があります。 HTMLタイプのものでこれができるのではないかと思っていました。ワードプロセッサがどのように機能するかのような本当に悪い例のために。テキストの入力と編集、および画像の貼り付けと編集。

事前に感謝します、不可能な(私にとって)仕事をお詫びします。

編集:私もこれをなんとかして保存できるようにしたいと思います。

1
njallam

実際には、TextViewウィジェットを使用してこれを行うことができます。まず、編集可能をtrueに設定する必要があります。

textview.set_editable(true)

Textviewsデータであるtextbufferを取得する必要があります。

buffer = textview.get_buffer()

次に、そのバッファーを使用して、そのバッファー内のデータを取得および設定できます。現在バッファにあるテキストを取得するには、次を使用します。

buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), false)

最初と2番目の引数は、テキストを取得する範囲であり、この場合はすべてテキストから外れます。最後の引数は、非表示の文字を取得するかどうかを指定します。この場合はfalseです。テキストを挿入するには、次を使用できます。

buffer.insert(buffer.get_end_iter(), "Sample text")

最初の引数は、テキストを挿入する場所(この場合は最後)を指定します。 2番目の引数は挿入するテキストです。バッファ内のすべてのデータを置き換えるには、次を使用できます。

buffer.set_text("Sample text")

これにより、バッファ内のすべてが「サンプルテキスト」に置き換えられます。画像を挿入するには、以下を使用してpixbufを作成する必要があります。

pixbuf = gtk.gdk.pixbuf_new_from_file(filename)

Pixbufのサイズを変更するには、次を使用します。

pixbuf.scale_simple(dest_width, dest_height, gtk.gdk.INTERP_BILINEAR)

最初の2つの引数は新しい幅と高さで、3番目の引数はスケーリング方法を制御する補間タイプです(4つのタイプがあります ここ )。次に、次を使用してこのpixbufをバッファに追加できます。

buffer.insert_pixbuf(buffer.get_end_iter(), pixbuf)

これにより、バッファの最後に画像が挿入されます。

ウィジェットの追加、余白の設定、クリップボードからのコピーと貼り付け、カーソルでの挿入などを行うこともできますが、そのために以下のリンクを参照してください。

Edit:フォーマットされた保存/ロードの場合、textbuffersシリアル化メソッドを使用できます。まず、register_serialize_tagset()メソッドを使用する必要があります。

format = buffer.register_serialize_tagset()

次に、そのserializeメソッドを使用して、シリアル化されたデータを取得できます。

data buffer.serialize(buffer, format, buffer.get_start_iter(), buffer.get_end_iter())

これにより、データがテキストバッファの内部形式で返され、ファイルに保存できます。このデータをロードするには、最初にtextbufferのregister_deserialize_tagset()メソッドを呼び出します。

format = emptyBuffer.register_deserialize_tagset()

次に、deserialize()メソッドを使用してデータをロードできます。

emptyBuffer.deserialize(emptyBuffer, format, emptyBuffer.get_end_iter(), data)

これにより、データがテキストバッファに読み込まれます。

Edit2:ユーザーがドラッグして移動およびサイズ変更できるようにする場合は、代わりにpixbufを画像ウィジェット(画像ウィジェット)にロードする必要がありますイベントボックスに、イベントボックスを子アンカーに入れてテキストビューに配置し、そのウィジェットのxイベントを処理し、ハンドラーにコードを記述して、画像を移動またはサイズ変更します。

リソース:

1
Sam Bickley