gtk.ScrolledWindow中使用gtk.TextView显示固定首行

1 投票
1 回答
552 浏览
提问于 2025-04-18 02:10

我有一段代码,它在一个可滚动的窗口里创建了一个文本视图。我想让一行文字“Hello World”作为第一行出现在这个文本视图里。此外,我还想让这一行固定在顶部,也就是说,即使窗口向下滚动,这一行也应该一直显示。这个位置应该是固定的,即使在文本视图里输入了很多行文字,或者滚动到最底部,这一行也能看得见。

import gtk
class scoreWindow:
   def __init__(self):
    self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    #self.window.set_size_request(800, 200)
    self.window.set_resizable(False)
    self.window.set_title("Score card")
    self.window.set_position(gtk.WIN_POS_CENTER)
    self.vb=gtk.VBox()

    line="This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant.This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant."

    self.go=gtk.Label("Textview\n")
    self.lalign = gtk.Alignment(0, 0, 0, 0)
    self.label_result = gtk.Label("  Title")
    #self.label_result.set_justify(gtk.JUSTIFY_LEFT)
    self.lalign.add(self.label_result)

    self.scrolled_window = gtk.ScrolledWindow()
    self.scrolled_window.set_border_width(10)
    self.scrolled_window.set_size_request(300, 300)

    self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
    self.scrolled_window.show()
    self.tv = gtk.TextView()
    self.tv.set_editable(1)
    self.tv.set_cursor_visible(1)
    self.tv.set_left_margin(30)
    textbuffer = self.tv.get_buffer()
    self.tv.show()
    textbuffer.set_text(line)

    self.scrolled_window.add_with_viewport(self.tv)


    self.vb.pack_start(self.lalign, False, False, 0)
    self.vb.pack_start(self.go, False, False, 0)
    self.vb.pack_start(self.scrolled_window, True, True, 0)
    color = gtk.gdk.color_parse('#FF8300')
    self.window.modify_bg(gtk.STATE_NORMAL, color)
    self.window.add(self.vb)
    self.window.show_all()

  def main(self):
    gtk.main()



if __name__ == "__main__":
hello = scoreWindow()
hello.main()

1 个回答

1

首先,在滚动窗口上方添加一个 gtk.Entry 控件。这就像是在你的文本视图上方放了一行总是显示的内容。

接着,添加一些信号处理器,这样当你按下比如回车键或向下箭头键时,光标就会从这个输入框移动到文本视图。

再添加一些信号处理器,当你在第一行时,如果按下向上箭头键,光标就会从文本视图移动回输入框。

撰写回答