4

「オフィスのような」TextView を作成しようとしています。あれは:

  • TextView 自体の幅は固定されています (そのため、テキストが紙の上でどのように見えるかを示しています)
  • ウィンドウ (TextView がパックされている) が固定幅よりも小さい場合: TextView はスクロール可能である必要があります。
  • ウィンドウが大きい場合は、固定幅を維持するために左右に余白を追加します

これは私が思いついたものであり、たとえば、ウィンドウの現在の幅よりも多くのスペースが必要な行を書くときに、カーソルがビューポートから出た場合にスクロールしないことを除いて、実際には本来のように動作します。

ビューポートを「同期」しておくための最良の方法は何ですか? カスタム ビューポートを作成する必要がありますか?

前もって感謝します!

#!/usr/bin/env python2
# encoding: utf-8

import gtk


class SheetTextView(gtk.TextView):
    WIDTH = 700

    def __init__(self):
        gtk.TextView.__init__(self)
        self.set_wrap_mode(gtk.WRAP_WORD)
        self.set_size_request(self.WIDTH, -1)
        self.connect('size-allocate', self._on_size_allocate)

    def _on_size_allocate(self, widget, event, data=None):
        # Reset left/right margin to simulate a fixed line width
        x, y, width, height = self.get_allocation()
        if width > self.WIDTH:
            margin = (width - self.WIDTH) / 2
            self.set_left_margin(margin)
            self.set_right_margin(margin)


if __name__ == "__main__":
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.connect('delete_event', gtk.main_quit)

    view = SheetTextView()

    scroll = gtk.ScrolledWindow()
    scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
    scroll.add_with_viewport(view)

    window.add(scroll)
    window.show_all()
    gtk.main()
4

1 に答える 1

0

You mean something like this?

Dropbox link

Please note this is just a test, all it does for now is change the size when necessary, is that what you meant?

If so, please tell me and I'll fix the bugs and improve.

EDIT: Please note this is just scratch code, messy coded...

于 2012-09-18T16:33:01.780 に答える