我正在尝试将一些文本添加到pygtk中的滚动窗口中。 textview包装在一个简单的盒子容器中。我在网上搜索并发现我需要先添加一个视口才能使其正常工作但我不断收到以下错误:
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”文件中向滚动窗口添加了一个视口。欢迎任何帮助或在线资源。
答案 0 :(得分:2)
第一次错过了真正的原因。
问题是您要向视口添加多个窗口小部件(只能有一个窗口小部件)。
gtk_viewport_add: assertion 'gtk_bin_get_child (bin) == NULL' failed
转换为:"视口中没有子节点的断言是错误的,因为您已经添加了一些内容。
您需要将所有容器打包到另一个容器中,然后将其添加到视口中。
答案 1 :(得分:-1)
它与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()
这样的容器中,但它没有显示出来。