본문 바로가기
컴퓨터 관련/Linux || Unix

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

by _BlankSpace 2017. 4. 23.

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에서 콘솔에 메시지를 출력하는 함수이다.


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

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

저에겐 큰 도움이 됩니다!


댓글