Hey! I want to get started with GUI programming in C. I just installed GTK 3 on Mac. I know C isn't usually the first thing that comes to mind when one thinks of a GUI, but I want to try it out and have a little fun. Can you write me a sample GTK app and makefile, please?
system
Ei!Eu quero começar com a programação da GUI em C. Acabei de instalar o GTK 3 no Mac.Eu sei que C geralmente não é a primeira coisa que vem à mente quando se pensa em uma GUI, mas quero experimentar e me divertir um pouco.Você pode me escrever um aplicativo de amostra GTK e makefile, por favor?
user
Claro!Vamos criar um aplicativo de amostra que pegue o primeiro argumento sem nome da linha de comando e mostra esse texto em uma janela.Primeiro, verifique se você tem GTK+ 3 instalado, o que pode ser feito através do Homebrew: Brew Install GTK+ 3

gtkapp.c:
#include <stdio.h>
#include <gtk/gtk.h>

estático void print_text (gtkwidget *widget, dados gpointer)
{
  printf ("%s \ n", (char*) dados);
}

estático void init (gtkapplication *app, gpointer user_data) {
  Janela GTKWidget *;
  Botão gtkwidget *;
  Gtkwidget *button_box;

  window = gtk_application_window_new (app);
  gtk_window_set_title (gtk_window (janela), "meu aplicativo");
  gtk_window_set_default_size (gtk_window (janela), 400, 400);// Janela 400x400

  button_box = gtk_button_box_new (gtk_orientation_horizontal);
  gtk_container_add (gtk_container (janela), button_box);

  char *text = (char *) user_data;

  Button = gtk_button_new_with_label (texto);
  g_signal_connect (botão, "clique", g_callback (print_text), texto);
  gtk_container_add (gtk_container (button_box), botão);
  gtk_widget_show_all (janela);
}

int main (int argc, char ** argv) {

  buffer de char [50];

  printf ("Digite uma string para imprimir:");
  scanf ("%49s", buffer);// MAX 49 caracteres, para permitir espaço para terminação nula em buffer.

  GtkApplication *app;
  status int;// será definido pela função g_application_run posteriormente e retornado como nosso código de status no final.

  app = gtk_application_new ("com.me.app", g_application_default_flags);
  g_signal_connect (app, "ativar", g_callback (init) e buffer);// Envie o endereço do nosso buffer para nossa função init como o argumento GPoInter User_Data.
  status = g_application_run (g_application (app), argc, argv);
  g_object_unref (app);

  status de retorno;
}


makefile:
gtkapp: gtkapp.c
gcc `pkg-config-cflags gtk+-3.0` -o gtkapp gtkapp.c` pkg-config--libs gtk+-3.0`
assistant
<|system|>
</s>
<|user|>
Ei!Eu quero começar com a programação da GUI em C. Acabei de instalar o GTK 3 no Mac.Eu sei que C geralmente não é a primeira coisa que vem à mente quando se pensa em uma GUI, mas quero experimentar e me divertir um pouco.Você pode me escrever um aplicativo de amostra GTK e makefile, por favor?</s>
<|assistant|>
Claro!Vamos criar um aplicativo de amostra que pegue o primeiro argumento sem nome da linha de comando e mostra esse texto em uma janela.Primeiro, verifique se você tem GTK+ 3 instalado, o que pode ser feito através do Homebrew: Brew Install GTK+ 3

gtkapp.c:
#include <stdio.h>
#include <gtk/gtk.h>

estático void print_text (gtkwidget *widget, dados gpointer)
{
  printf ("%s \ n", (char*) dados);
}

estático void init (gtkapplication *app, gpointer user_data) {
  Janela GTKWidget *;
  Botão gtkwidget *;
  Gtkwidget *button_box;

  window = gtk_application_window_new (app);
  gtk_window_set_title (gtk_window (janela), "meu aplicativo");
  gtk_window_set_default_size (gtk_window (janela), 400, 400);// Janela 400x400

  button_box = gtk_button_box_new (gtk_orientation_horizontal);
  gtk_container_add (gtk_container (janela), button_box);

  char *text = (char *) user_data;

  Button = gtk_button_new_with_label (texto);
  g_signal_connect (botão, "clique", g_callback (print_text), texto);
  gtk_container_add (gtk_container (button_box), botão);
  gtk_widget_show_all (janela);
}

int main (int argc, char ** argv) {

  buffer de char [50];

  printf ("Digite uma string para imprimir:");
  scanf ("%49s", buffer);// MAX 49 caracteres, para permitir espaço para terminação nula em buffer.

  GtkApplication *app;
  status int;// será definido pela função g_application_run posteriormente e retornado como nosso código de status no final.

  app = gtk_application_new ("com.me.app", g_application_default_flags);
  g_signal_connect (app, "ativar", g_callback (init) e buffer);// Envie o endereço do nosso buffer para nossa função init como o argumento GPoInter User_Data.
  status = g_application_run (g_application (app), argc, argv);
  g_object_unref (app);

  status de retorno;
}


makefile:
gtkapp: gtkapp.c
gcc `pkg-config-cflags gtk+-3.0` -o gtkapp gtkapp.c` pkg-config--libs gtk+-3.0`</s>
