填充Glade组合框“gtk_entry_set_text:断言`文本!= NULL'失败”?

时间:2015-04-13 06:16:46

标签: python combobox gtk pygtk glade

我正在使用Glade为gimp插件构建一个“伪智能”GUI。 GUI的主要部分有两个框架,并使用“reparent”方法导入内容。主要目的是使第二帧的内容由在第一帧中作出的选择确定。 (最终,目的是将此GUI导入为"笔记本的标签页的内容")

首先,我创建了一个简单的窗口,包含一个“RadioButtonBox”和一个“ComboBox”,它使用以下命令填充:

# create the cell renderer
self.cell = gtk.CellRendererText()
#populate the default choice into the Selection  combobox
self.SelectionBox = self.builder.get_object("SelectionBox")
self.SelectionBox.set_model(self.EditCommands)
self.SelectionBox.pack_start(self.cell, True)
self.SelectionBox.add_attribute(self.cell, 'text', 1)
self.SelectionBox.set_active(0)
# End: populate the selection combo box section

这很有效,我可以成功地“导入”和“重新显示”简单的GUI,作为更大,更复杂的GUI的第一帧,没有任何问题。但是,随着设计的进展,将第一帧的代码作为主GUI的一个组成部分变得更加方便,这就是我的问题开始的地方。

我在较大的GUI的第一帧中复制了简单GUI的内容,并从简单的GUI“ init ”功能中复制/粘贴代码。换句话说,一切都是相同的。

不幸的是,当我运行代码时,我收到以下错误:

C:\Documents and Settings\anonymous\Desktop\Glade-tutorial\BatchEditMain\BatchEditLibrary\Tab.py:46: GtkWarning: gtk_entry_set_text: assertion `text != NULL' failed
  self.SelectionBox.set_active(0)

有人可以解释一下问题是什么吗?

提前致谢

欧文

2 个答案:

答案 0 :(得分:0)

GTK警告说,使用gtk_entry.set_text()而不是某些文字调用某处None。这发生在对self.SelectionBox.set_active(0)

的调用中

答案 1 :(得分:0)

这有点像挖墓,但我今天偶然发现了同一个问题,这是google显示的第一篇文章...

经过进一步的研究,我发现了这个问题:

How create a combobox on Python with GTK3? 作者似乎有相同的错误。

在他和我的案子中似乎可以解决这个问题的方法很简单:

combobox.set_entry_text_column(0)

重要的是它必须在set_active(0)前面! 因此,在您的情况下,它将是:

...
self.SelectionBox.add_attribute(self.cell, 'text', 1)
self.SelectionBox.set_entry_text_column(0)
self.SelectionBox.set_active(0)
...

PS:如果要应用“前景”之类的属性,请放心,如果将其设置为befor,它们似乎会被set_entry_text_column(0)覆盖。 例如:如果模型中的项目看起来像这样:

["TEXT_YOU_WANT_TO_DISPLAY","TEXT_FOREGROUNDCOLOR_AS_MARKUP_COLOR"]

对前景色的更改可以通过以下方式应用:

...
self.SelectionBox.add_attribute(self.cell, 'text', 0)
self.SelectionBox.set_entry_text_column(0)
self.SelectionBox.add_attribute(self.cell, 'foreground', 1)
self.SelectionBox.set_active(0)
...