【发布时间】:2021-06-02 19:15:42
【问题描述】:
我正在使用 C、Glade 和 Gtk 设计一个 GUI。
我在 glade 中配置了一些信号来更新各种小部件的标签,主要是 GtkButton 和 GtkLabel。整体功能是,当单击某个单选按钮时,所有按钮和标签都会响应更改(语言选择)。
我在小部件 _draw() 函数中使用函数 gtk_label_set_label(...) 并且它按预期工作(文本更改,g_print 发生(一次))。
gboolean on_lblMyLabel_draw(GtkLabel *label, gpointer *user_data) {
gtk_label_set_label(label, "custom text");
g_print("%s\n", "custom text");
return FALSE;
}
但是,当我通过按钮尝试相同的操作时,
gboolean on_btnMyButton_draw(GtkButton *button, gpointer *user_data) {
gtk_button_set_label(button, "custom text");
g_print("%s\n", "custom text");
return FALSE;
}
文本不会更新,而是消失,并且 g_print() 语句会永远打印(就像 draw 递归调用自身一样)。
有趣的是,如果我将按钮代码从 _draw 移动到 _click,它会按预期工作,但是,我需要 GUI 重新绘制自身,因此在点击时更新是不切实际的。
- 有没有办法,使用 _draw() 来防止这种情况?
- 有没有更好的方法来做到这一点?
谢谢!
【问题讨论】:
标签: user-interface gtk glade gtkbutton