gpt4 book ai didi

gtk - 在扩展器 (lablgtk) 的 label_widget 中捕获点击

转载 作者:行者123 更新时间:2023-12-01 13:50:15 24 4
gpt4 key购买 nike

在 lablgtk 中,我有一个 Expander 小部件,我在其中添加了一个按钮作为其标签的一部分,如下图所示:

GTK expander with a custom label_widget containing a button

但是,我无法捕获对此按钮的点击,因为所有这些点击似乎都被 Expander 对象本身捕获。

我什至尝试在扩展器和按钮之间添加一个事件框(类似于推荐用于可点击 GLabel 的方法),但这没有帮助。

有没有办法确保按钮接收到信号?

这里有一个独立的例子来说明这一点:点击按钮只会打印 expander activated!,但不会打印 button clicked!

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 ()

最佳答案

这似乎是一个 bug在 GTK+ 中。描述了一种解决方法 here但它在 C 中。您必须将以下 OCaml 代码添加到您的主要功能。它对我有用。

  GMain.Idle.add (fun () ->
let dummy = GButton.button ~stock:`OK () in
expander#set_label_widget dummy#coerce ;
expander#set_label_widget expander_label_widget#coerce ;
false) ;

关于gtk - 在扩展器 (lablgtk) 的 label_widget 中捕获点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32377890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com