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), 200, 150); gtk_container_set_border_width(GTK_CONTAINER(window), 15); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); halign = gtk_alignment_new(0, 0, 0, 0); btn = gtk_button_new_with_label("Click"); gtk_widget_set_size_request(btn, 70, 30); 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에서 콘솔에 메시지를 출력하는 함수이다.
이상 글을 마무리 짓겠습니다.
저의 글에 공감이 되셨거나 도움이 되셨다면, 공감 버튼 한번 씩 꾸욱 눌러주시면 감사하겠습니다.
저에겐 큰 도움이 됩니다!
'컴퓨터 관련 > Linux || Unix' 카테고리의 다른 글
리눅스(Linux) 루트 권한 얻기 (0) | 2017.04.27 |
---|---|
컴파일러(compiler)와 인터프리터(interpreter)의 차이점 / 컴파일러란? /인터프리터란? (0) | 2017.04.25 |
GTK+ 이벤트[2] g_signal_connect과 g_signal_connect_swapped 의 차이점 (0) | 2017.04.23 |
GTK+ 이벤트[1] 시그널 형태 (0) | 2017.04.23 |
GTK+ 컨테이너 Widget [2] Scrollbar widget (0) | 2017.04.23 |
댓글