python - PyGTK:制作一个行为类似于 OpenOffice 的 TextView

标签 python gtk pygtk

我正在尝试制作一个“类似办公室”的 TextView。那是:

  • TextView 本身有一个固定的宽度(所以它有点显示文本在一张纸上的样子)
  • 如果窗口(TextView 所在的窗口)小于固定宽度:TextView 应该是可滚动的
  • 如果窗口较大,则向左/右添加边距以保持固定宽度

  • 这就是我想出的,它实际上表现得像它应该的那样,除了如果你的光标离开视口(viewport)它不会滚动,例如当你写一个需要比窗口当前宽度更多空间的行时。

    保持视口(viewport)“同步”的最佳方法是什么?我必须创建自定义视口(viewport)吗?

    提前致谢!
    #!/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()
    

    最佳答案

    你的意思是这样的?

    Dropbox link

    请注意,这只是一个测试,它现在所做的只是在必要时更改大小,
    这是你的意思吗?

    如果是这样,请告诉我,我会修复错误并改进。

    编辑:请注意这只是临时代码,乱码......

    关于python - PyGTK:制作一个行为类似于 OpenOffice 的 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436614/

    相关文章:

    pygtk - 在 gtk3 中删除了默认参数?

    python - pygtk 应用程序中的单独线程

    python - 从 python 运行 .sh 脚本作为 sudo

    python - 如何从两个字典的列表中收集具有相同键的值

    python - 使用 python 从 OpenCV 中的视频自动捕获图像

    javascript - 在 Gjs Gtk.Application 的命令行中处理作为参数传递的文件

    python - SSH2 Python 如何识别文件是目录

    python - Pygtk:CellRenderer 耗尽所有垂直空间

    linux - 如何在 linux 中显示来自 bash 脚本的 GUI 消息框?

    python - gtk3中的 `parent`在哪里?