「オフィスのような」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()