Glade错误:<id>无法访问</id>

时间:2014-08-13 12:16:45

标签: user-interface ocaml glade

这是我关于stackoverflow的第一个问题。
我在网上搜索无济于事,我真的无法弄清楚出了什么问题,所以我们走了。

我正在尝试向Marionnet添加一个对话框窗口。窗口信息主要包含在glade文件中,其中一些位从代码中修改。 lablgtk是允许gtk2(以及因此glade生成的文件)与ocaml语言一起使用的框架。 应用程序已成功编译,但它会在启动时生成此运行时错误:

(marionnet.byte:5384): libglade-CRITICAL **: glade_xml_build_interface: assertion `wid != NULL' failed
Fatal error: exception Failure("Glade error: GtkDialog:dialog_RELATIVIZATION is not accessible.")
Raised at file "pervasives.ml", line 22, characters 22-33
Called from file "gui.ml", line 617, characters 9-85
Called from file "gui/gui_menubar_MARIONNET.ml", line 356, characters 17-49
Called from unknown location
Called from unknown location

错误表明类构造函数不存在或类似的东西,但我多次检查,我没有发现我使用的标识符中的任何拼写错误。我在这里错过了什么?异常实际上意味着什么?
为了证明没有拼写错误或缺少标识符,我将向您展示文件内容 文件gui.ml由lablgladecc2生成,它读取gui.xml(glade文件)的内容。这是gui.xml的摘录:

  <widget class="GtkDialog" id="dialog_RELATIVIZATION">
    <property name="visible">True</property>
    <property name="title" translatable="yes">Relativization</property>
    <property name="resizable">False</property>
    <property name="modal">True</property>
    <property name="destroy_with_parent">True</property>
    <property name="icon">marionnet-launcher.png</property>
    <property name="type_hint">dialog</property>
    <child internal-child="vbox">
    [...]

所以id&#34; dialog_RELATIVIZATION&#34;在那儿。实际上,生成的gui.ml文件具有正确的类和方法:

[...]
class dialog_RELATIVIZATION ?(file="gui.glade.patched") ?domain ?autoconnect(*=true*) () =
  let xmldata = Glade.create ~file  ~root:"dialog_RELATIVIZATION" ?domain () in
  object (self)
    inherit Glade.xml ?autoconnect xmldata
    val toplevel =
      new GWindow.dialog_any (GtkWindow.Dialog.cast
        (Glade.get_widget_msg ~name:"dialog_RELATIVIZATION" ~info:"GtkDialog" xmldata))
    method toplevel = toplevel
    val dialog_RELATIVIZATION =
      new GWindow.dialog_any (GtkWindow.Dialog.cast
        (Glade.get_widget_msg ~name:"dialog_RELATIVIZATION" ~info:"GtkDialog" xmldata))
    method dialog_RELATIVIZATION = dialog_RELATIVIZATION
[...]

这是我尝试访问窗口的代码:

let rel_dialog = new Gui.dialog_RELATIVIZATION () in
rel_dialog#toplevel#set_title (s_ "Relativization");
   rel_dialog#label_frequency#set_label (s_ "Frequency");
   rel_dialog#label_convergence#set_label (s_ "Convergence");
   rel_dialog#checkb_existing_machines#set_label (s_ "Apply to existing machines");

谷歌没有帮助我,我没有找到关于lablgtk的好文档。有谁知道异常意味着什么以及原因是什么?

0 个答案:

没有答案