[英]How to make an infinite loop in GTK
我想用 GTK 界面制作一个 C 程序,该程序在获得 state 后重复更新和显示变量(POS)的值。
基本上有两个按钮,UP 和 DOWN,当按下 UP 时,POS 应该更新为 POS = POS + 1,当按下 DOWN 时,它应该更新为 POS = POS - 1。
如果两者都被按下(它们是切换按钮),那么它应该在 +1 和 -1 后返回相同的值。
循环结束后,label (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
指定应在多长时间内调用回调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.