在expander(lablgtk)中的label_小部件中捕获点击
在lablgtk中,我有一个扩展小部件,我在其中添加了一个按钮作为其标签的一部分,如下图所示: 但是,我无法捕获对该按钮的单击,因为它们似乎都是由Expander对象本身捕获的 我甚至尝试在扩展器和按钮之间添加一个事件框(类似于可点击玻璃窗的建议),但这没有帮助 有没有办法确保按钮接收到信号 这里有一个自包含的示例来说明这一点:单击按钮仅打印在expander(lablgtk)中的label_小部件中捕获点击,gtk,ocaml,lablgtk,Gtk,Ocaml,Lablgtk,在lablgtk中,我有一个扩展小部件,我在其中添加了一个按钮作为其标签的一部分,如下图所示: 但是,我无法捕获对该按钮的单击,因为它们似乎都是由Expander对象本身捕获的 我甚至尝试在扩展器和按钮之间添加一个事件框(类似于可点击玻璃窗的建议),但这没有帮助 有没有办法确保按钮接收到信号 这里有一个自包含的示例来说明这一点:单击按钮仅打印已激活的扩展器,但从未单击过按钮 let main () = (* create expander, a label_widget, and a bu
已激活的扩展器代码>,但从未单击过按钮代码>
let main () =
(* create expander, a label_widget, and a button *)
let expander = GBin.expander () in
let expander_label = GMisc.label ~text:"expander" () in
let expander_label_widget = GPack.hbox () in
let button = GButton.button ~stock:`OK () in
(* add button to label_widget, and label_widget to expander *)
expander_label_widget#add expander_label#coerce;
expander_label_widget#add button#coerce;
expander#set_label_widget expander_label_widget#coerce;
(* add events for both the button and the expander *)
ignore (button#connect#clicked
~callback:(fun () ->
Format.printf "button clicked!@."));
ignore (expander#connect#activate
~callback:(fun () ->
Format.printf "expander activated!@."));
(* create window and add expander *)
let window = GWindow.window () in
window#add expander#coerce;
ignore (window#connect#destroy
~callback:(fun () -> GMain.Main.quit ()));
(* show result *)
window#show ();
GMain.Main.main ()
let () =
ignore (GtkMain.Main.init ());
main ()
这似乎是GTK+中的一个问题。
这里描述了一个变通方法,但它是用C语言编写的。
您必须将以下OCaml代码添加到主函数中。这对我有用
GMain.Idle.add(fun()->
让dummy=GButton.button~stock:`OK()输入
扩展器#设置#标签#小部件虚拟#强制;
扩展器#设置标签#小部件扩展器#标签#小部件#强制;
假);