在pygtk中将TextView添加到ScrolledWindow
我正在尝试在pygtk中向一个可滚动窗口添加一些文本。这个文本视图被放在一个简单的盒子容器里。我在网上查了一下,发现我需要先添加一个视口(viewport),这样才能正常工作,但我总是遇到以下错误:
Gtk-CRITICAL **: gtk_viewport_add: assertion 'gtk_bin_get_child (bin) == NULL' failed
这是我的代码:
container = Gtk.Box()
container.set_name('text_container')
tv = Gtk.TextView()
text_input = self.builder.get_object('entry1')
text = text_input.get_text()
text_input.set_text('')
tv.get_buffer().set_text(text)
container.pack_start(tv,True,True,0)
self.viewport.add(container)
我之所以采用这种方法,是因为我已经在我的“glade”文件中向可滚动窗口添加了一个视口。欢迎任何帮助或在线资源。
2 个回答
2
第一次没抓住真正的问题。
问题在于你往视口里添加了多个小部件,而视口只能放一个小部件。
gtk_viewport_add: assertion 'gtk_bin_get_child (bin) == NULL' failed
这句话的意思是:“视口里不能有其他东西,但你已经放了一个。”
你需要把所有的容器放进另一个容器里,然后再把那个容器添加到视口中。
0
之前我用HBox/VBox的时候,一切都正常,只有这个问题。不过现在我用了add_with_viewport()这个方法,我应该在什么对象上调用show()方法,才能让我添加的控件显示出来呢?下面是最终的代码:
container = Gtk.VBox()
container.set_name('text_container')
tv = Gtk.TextView()
text_input = self.builder.get_object('entry1')
text = text_input.get_text()
if text:
text_input.set_text('')
tv.get_buffer().set_text(text)
container.pack_start(tv,True,True,0)
self.sw.add_with_viewport(container)
因为没有变量指向刚刚添加的视口,我应该在什么对象上调用show()方法,才能让控件在滚动窗口中显示出来。我试着在容器上加show,比如用container.show()
,但它还是没有显示。