【问题标题】:Populating a Glade combobox "gtk_entry_set_text: assertion `text != NULL' failed"?填充 Glade 组合框“gtk_entry_set_text: assertion `text != NULL' failed”?
【发布时间】:2015-04-13 06:16:45
【问题描述】:

我正在使用 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)

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

提前致谢

欧文

【问题讨论】:

  • EditCommands 是否由该点填充?
  • 是的,但有一点需要注意:列表的间距似乎是偏移的,因此列表仅在下拉菜单中可见,而不在组合框本身中可见。

标签: python combobox gtk pygtk glade


【解决方案1】:

GTK 警告是说某处 gtk_entry.set_text() 被调用 None 而不是一些文本。这发生在对self.SelectionBox.set_active(0)的调用中

【讨论】:

  • 是的,这就是诊断结果,但这并不能解释为什么会这样。那里没有明显使用 GtkEntry 的东西(这可能是一个有条目的 GtkComboBox),因此需要进行更多调查。
  • 不,它没有,因为我们看不到SelectionBox 的代码。我已经解释了稍微神秘的警告信息。然后找到对gtk_entry.set_text() 的调用并追踪问题应该很简单。需要 OP 提供更多信息。
  • 1) 当“组合框”是简单 GUI 的一部分时,相同的代码可以工作,而当简单 GUI 被重新设置为更复杂的 GUI 的一部分时,它会继续工作图形用户界面。只有当我将功能直接构建到更复杂的 GUI 中时,它才会停止工作。 2) “SelectionBox”是一个 GTK/Glade 对象,由 'self.SelectionBox = self.builder.get_object("SelectionBox")' 3) 'gtk_entry 行定义。 set_text()' 不是由我的函数直接调用的,而是 GTK 的一部分。因此,任何对问题的合法解决都不应涉及跟踪此功能。
  • 我不确定我是否完全同意。 'gtk_entry.set_text() 由您定义的 GLADE 对象调用,而不是 GTK 的一些晦涩的内部工作。不管你认为它是否合法,如果你想解决你的问题,你将不得不找出这个调用失败的原因。如果您尝试设置不同的默认条目(例如self.SelectionBox.set_active(1))会发生什么?可以转储self.EditCommands的内容吗?
【解决方案2】:

这感觉有点像掘墓人,但我今天偶然发现了同样的问题,这是谷歌展示的第一篇文章......

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

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:如果你想应用诸如“前景”之类的属性,他们似乎会被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)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多