我想制作一个带有GTK接口(interface)的C程序,在获取一些切换按钮的状态并暂停/ sleep 1秒后重复更新和显示变量(POS)的值。
本质上有两个按钮,向上和向下,当按下向上时,POS 应更新为 POS = POS + 1,当按下向下时,应更新为 POS = POS - 1。
如果两者都被按下(它们是切换按钮),那么在+1和-1之后它应该返回到相同的值。
循环结束后,标签 (LABEL) 应显示 POS 值并暂停 1 秒,然后再开始。
我确实做了一个最小的工作示例,但我一直在制作循环。
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *UP;
GtkWidget *DOWN;
GtkWidget *LABEL;
float POS=0;
gchar *text;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkFixed");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 300);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
DOWN = gtk_toggle_button_new_with_label("DOWN");
gtk_fixed_put(GTK_FIXED(fixed), DOWN, 100, 200);
gtk_widget_set_size_request(DOWN, 80, 30);
UP = gtk_toggle_button_new_with_label("UP");
gtk_fixed_put(GTK_FIXED(fixed), UP, 200, 200);
gtk_widget_set_size_request(UP, 80, 30);
LABEL = gtk_label_new ("0");
gtk_fixed_put(GTK_FIXED(fixed), LABEL, 150, 100);
/*This while loop should do but I don't know how to make it run
while TRUE {
if (gtk_toggle_button_get_mode(GTK_TOGGLE_BUTTON(UP))) {
POS = POS + 1.;}
if (gtk_toggle_button_get_mode(GTK_TOGGLE_BUTTON(DOWN))) {
POS = POS - 1.;}
text = g_strdup_printf (" %f ", POS);
gtk_label_set_label (GTK_LABEL(LABEL), text);
sleep(1);
}; */
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
}
最佳答案
对 gtk_main 的调用已经是一个循环,它运行主事件循环。然后你需要考虑哪个事件触发了你想要的行为。单击按钮?连接到按钮的“单击”信号。超时?使用 g_timer_add
或 g_timer_add_seconds
指定应调用回调的时间。
关于c - 如何在 GTK 中制作无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050263/