컴퓨터 관련/Linux || Unix

GTK+ 버튼 클릭으로 콘솔에 문자열 출력

_BlankSpace 2017. 4. 23. 02:40

GTK의 시그널 처리를 이용하여 버튼을 누를 때마다 Console 창에 특정 문자열을 출력하는 방법을 소개하고자 한다.

Java에서 액션리스너를 사용하여, 간단하게 출력하는 것처럼 GTK도 간단하다.

그럼 다음 소스를 먼저 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <gtk/gtk.h>
 
void button_clicked(GtkWidget *widget, gpointer data) {  
    g_print("clicked\n");
}
 
int main(int argc, char *argv[]) {    
    GtkWidget *window;
    GtkWidget *halign;
    GtkWidget *btn;
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "GtkButton");
    gtk_window_set_default_size(GTK_WINDOW(window), 200150);
    gtk_container_set_border_width(GTK_CONTAINER(window), 15);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
 
    halign = gtk_alignment_new(0000);
    btn = gtk_button_new_with_label("Click");
    gtk_widget_set_size_request(btn, 7030);
  
    gtk_container_add(GTK_CONTAINER(halign), btn);
    gtk_container_add(GTK_CONTAINER(window), halign);
 
    g_signal_connect(G_OBJECT(btn), "clicked"
        G_CALLBACK(button_clicked), NULL);
 
    g_signal_connect(G_OBJECT(window), "destroy"
        G_CALLBACK(gtk_main_quit), NULL);
 
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
cs

소스출처: http://zetcode.com/gui/gtk2/gtkevents/

실행화면은 다음과 같다.

다음과 같이 버튼을 누를 때마다 clicked 라는 특정 문자열이 출력된다.


1
2
3
4
5
void button_clicked(GtkWidget* widget, gpointer data) {
 
    g_print("clicked\n");
 
}
cs


1
g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(button_clicked), NULL);
cs

- 기본적인 signal을 등록하는 함수이다.

- 첫 번째 인자는 signal이 일어나는 widget이다.

- 두 번째 인자는 signal의 이벤트 종류이다.

- 버튼의 시그널 종류는 다음과 같다.

@ activate

@ clicked

@ enter

@ leave

@ pressed

@ released

1
2
3
4
5
void button_clicked(GtkWidget* widget, gpointer data) {
 
    g_print("clicked\n");
 
}
cs

- g_print()는 gtk에서 콘솔에 메시지를 출력하는 함수이다.


이상 글을 마무리 짓겠습니다.

저의 글에 공감이 되셨거나 도움이 되셨다면, 공감 버튼 한번 씩 꾸욱 눌러주시면 감사하겠습니다.

저에겐 큰 도움이 됩니다!