繁体   English   中英

如何在 GTK 中进行无限循环

[英]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_addg_timer_add_seconds指定应在多长时间内调用回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM