c - 如何在 GTK 中制作无限循环

标签 c gtk

我想制作一个带有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_addg_timer_add_seconds 指定应调用回调的时间。

关于c - 如何在 GTK 中制作无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050263/

相关文章:

c - 从 ADC 样本到 C 语言的 .WAV 文件

c - Netfilter:阅读应用程序级别的内容?

GtkDrawingArea - 如何使其可绘制?

c - 初始化作为结构数组索引的 C 结构

c - 如何将 SIGALRM 传递给在微秒内完成执行的程序?

java - JProgressBar 在 Linux 上运行缓慢

c - GtkTreeView 将选择设置为特定行

gtk - gdk_device_get_source != GDK_SOURCE_KEYBOARD

c - 使用 Glade(和 C)的 GTK+ 中消息对话框的信号处理程序

C - 将 system() 函数输出打印到文件中