gtk.ScrolledWindow中使用gtk.TextView显示固定首行
我有一段代码,它在一个可滚动的窗口里创建了一个文本视图。我想让一行文字“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 控件。这就像是在你的文本视图上方放了一行总是显示的内容。
接着,添加一些信号处理器,这样当你按下比如回车键或向下箭头键时,光标就会从这个输入框移动到文本视图。
再添加一些信号处理器,当你在第一行时,如果按下向上箭头键,光标就会从文本视图移动回输入框。