gtk / glade 프로그램 개발 (1)

전환 하 다http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=kylix&Number=566950&page=0&view=collapsed&sb=4&o=all&fpart=all&vc=1
by cuigf
저 는 gtk 2.0 / glade 2.10.0 을 설 치 했 습 니 다. 시스템 환경 RH9 는 한 달 동안 gtk 프로 그래 밍 에 대해 소 개 를 하려 고 합 니 다. 여러분 의 지 지 를 바 랍 니 다.
windows 에서 개발 하여 만 든 프로그램 을 Linux 로 옮 깁 니 다. (소스 코드 는 수정 되 지 않 고 다시 컴 파일 하고 연결 하면 됩 니 다)
필요 한 개발 도구:
Dev - cpp 4.9.9.2 (C 프로그램의 컴 파일, 연결 진행)
Glade (그래 픽 인터페이스 디자인 진행)
Gtk 개발 구성 요소
두 개의 패키지 만 필요 합 니 다.
devcpp-4.9.9.2_setup
gtk - win 32 - devel - 2.6.8 - rc1 (glade 와 gtk 개발 구성 요소 포함)
다운로드 사이트 주소:
www.bloodshed.net
gladewin32.sourceforge.net,
위의 버 전 으로 다운로드 하 십시오. 다른 버 전 은 bug 가 있 습 니 다.
소프트웨어 를 다운로드 하고 설치 합 니 다 (devcpp - 4.9.9.2 setup 을 설치 하고 gtk - win 32 - devel - 2.6.8 - rc1 을 설치 합 니 다. dev - cpp 옵션 이 나타 날 때 선택 하 십시오).
다음은 우리 의 첫 번 째 프로그램 을 실행 합 니 다.
(평론: 저 자 는 윈도 우즈 에서 리 눅 스에 이식 하 는 방법 을 개 발 했 는데 본인 은 이런 방법 을 추천 하지 않 습 니 다)
2 절 Glade 생 성 코드 읽 기 (1)
glade 의 원본 파일 디 렉 터 리 src 에 7 개의 코드 파일 이 있 습 니 다. 각각:
1 > callbacks. c Glade 에서 생 성 된 대부분의 빈 리 셋 함수 가 있 는 파일 입 니 다. 코드 를 직접 추가 하 십시오.
2 > callbacks. h (헤더 파일) Glade 에서 생 성 된 리 셋 함수 의 정의 파일
4 > interface. c Glade 에서 생 성 된 인터페이스 소스 파일
5 > interface. h (헤더 파일) Glade 에서 생 성 된 인터페이스의 정의 파일
6 > main. c 주 함수
7 > support. c 지원 파일
8 > support. h (헤더 파일) 지원 파일
galde 에서 생 성 된 devcpp 디 렉 터 리 에 두 개의 파일 이 있 습 니 다.
1 > config. h Glade 에서 생 성 된 프로필
2 > gtk1. dev Glade 에서 생 성 된 devcpp 프로젝트 파일 (저장 할 때 열 린 이름).
이렇게 많은 파일 에 놀 라 지 마 세 요. 코드 를 작성 해 야 하 는 파일 은 세 개 밖 에 없습니다. (다른 파일 은 움 직 이지 마 세 요)
main. c (일반적으로 소량의 수정 만 하면 됩 니 다)
callbacks. h (일반적으로 소량의 수정 만 하고 심지어 수정 하지 않 습 니 다)
callbacks. c (함수 의 구체 적 인 실현 부분, 일 정량의 코드 를 작성 해 야 합 니 다)
그 중 callbacks. c 는 코드 를 작성 한 주 파일 입 니 다.
glade 에서 생 성 된 인터페이스 파일 interface. c 에 대해 간단히 알 아 보 겠 습 니 다.
GtkWidget*
create_window1 (void)
{
GtkWidget * window 1; / * 창 구성 요소 정의 * /
GtkWidget * fixed 1; / * 다른 구성 요 소 를 설치 할 때 고정 용기 구성 요 소 를 정의 합 니 다 * /
GtkWidget * label 1; / * 태그 구성 요소 정의 * /
window 1 = gtk window new (GTK WINDOW TOPLEVEL); / * 새 창 만 들 기 * /
gtk window set title (GTK WINDOW (window 1), ("window 1"); / * 창 제목 설정 * /
gtk window set default size (GTK WINDOW (window 1), 400, 300); / * 설정 창의 기본 크기 는 400, 300 * /
fixed 1 = gtk fixed new (); / * 고정 용기 새로 만 들 기 * /
gtk widget show (fixed 1); / * 고정 용기 표시 * /
gtk container add (GTK CONTAINER (window 1), fixed 1); / * 창 에 고정 용 기 를 추가 합 니 다 * /
label 1 = gtk label new ( ("/ 346 / 254 / 242 / 350 / 277 / 216 / 265 / 260 / 350 / 277 / 233GTK / 347 / 232 / 204 / 344 / 270 / 226 / 347 / 225 / 214"); / * 새 탭 * /
gtk widget show (label 1); / * 탭 표시 * /
gtk fixed put (GTK FIXED (fixed 1), label 1, 120, 72); / * 고정 용기 에 라벨 추가 * /
gtk widget set size request (label 1, 136, 40); / * 탭 크기 설정 * /
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
GLADE_HOOKUP_OBJECT (window1, fixed1, "fixed1");
GLADE_HOOKUP_OBJECT (window1, label1, "label1");
return window1;
}
(평가: 버 전이 다 르 고 안의 코드 가 다 를 수 있 습 니 다) (이 부분 은 이해 할 수 있 는 만큼 이해 할 수 있 고 이해 할 수 있 는 만큼 이해 할 수 있 으 며 이해 할 수 없 더 라 도 괜 찮 습 니 다.)
파일: main. c
부분 적 으로 만 설명 하 세 요. 앞으로 수준 이 높 아 졌 으 니 천천히 보 세 요!
다음 코드 는 main. c 에서 발췌 합 니 다.
int main (int argc, char *argv[])
{
GtkWidget * window 1; / * 정의 window 1 구성 요소 * /
gchar *pixmap_dir;
#ifdef G_OS_WIN32
package_prefix = g_win32_get_package_installation_directory (NULL, NULL);
package_data_dir = g_build_filename (package_prefix, "share", NULL);
package_locale_dir = g_build_filename (package_prefix, "share", "locale", NULL);
#endif
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, package_locale_dir);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif
gtk set locale (); / * 이 함 수 를 호출 해 야 중국어 * /
gtk init (& argc, & argv); / * GTK 초기 화 * /
pixmap_dir = g_build_filename (package_data_dir, PACKAGE, "pixmaps", NULL);
add_pixmap_directory (pixmap_dir);
g_free (pixmap_dir);
/*
* The following code was added by Glade to create one of each component
* (except popup menus), just so that you see something after building
* the project. Delete any components that you don't want shown initially.
*/
window 1 = create window 1 (); / * window 1 구조물 만 들 기 * /
gtk widget show (window 1); / * * window 1 구성 요 소 를 표시 합 니 다 /
g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit),
NULL);
/ * 윈도 우즈 1 부품 의 "destroy" 이벤트, 관련 함수,
즉, window 1 의 닫 기 단 추 를 눌 렀 을 때 window 1 을 닫 고 gtk * / 를 종료 하 는 것 입 니 다.
gtk main (); / * gtk 메 인 프로그램 실행 시작 * /
#ifdef G_OS_WIN32
g_free (package_prefix);
g_free (package_data_dir);
g_free (package_locale_dir);
#endif
return 0;
}
라벨 부재
태그 부재 에 사용 되 는 함수
새 탭 만 들 기:
gtk_label_new(“label1”);
gtk_label_new_with_mnemonic(“label1”);
문자열 에 줄 바 꿈 자 를 배치 하면 여러 줄 의 탭 을 만 들 수 있 습 니 다.
탭 의 텍스트 변경:
gtk_label_set_text(GTK_LABEL(label1),”label2”);
탭 의 현재 텍스트 가 져 오기:
gtk_label_get_text(GTK_LABEL(label1));
탭 텍스트 정렬 방식 설정:
gtk_label_set_justify(GTK_LABEL(label1),GTK_JUSTIFY_LEFT);
GTK_JUSTIFY_왼쪽 / * 왼쪽 정렬 * /
GTK_JUSTIFY_오른쪽 / * 오른쪽 정렬 * /
GTK_JUSTIFY_CENTER / * 가운데 정렬 * /
GTK_JUSTIFY_FILL / * 충만 * /
탭 안의 텍스트 자동 줄 바 꾸 기:
gtk_label_set_line_wrap(GTK_LABEL(label1),TRUE);
주: 라벨 은 신 호 를 일 으 킬 수 없습니다. 신 호 를 일 으 키 려 면 이벤트 박스 에 라벨 을 넣 어야 합 니 다.
텍스트 입력 부재 의 상용 함수:
텍스트 입력 부재 만 들 기:
GtkWidget *entry1;
entry1 = gtk_entry_new();
텍스트 입력 부재 의 현재 텍스트 내용 변경:
gtk_entry_set_text(GTK_ENTRY(entry1),"entry2");
텍스트 입력 부재 의 현재 텍스트 내용 가 져 오기:
const gchar *text1;
text1 = gtk_entry_get_text(GTK_ENTRY(entry1));
다음 절 은 하나의 예 를 통 해 텍스트 입력 구성 요소 (text entry) 의 사용 을 설명 합 니 다.
텍스트 입력 부재 (2)

、 glade
1、 glade

2、 : window (window1), window1 (fixed positions), (entry1)。

3、 entry1 changed ( )on_entry1_changed, signals object entry1

4、 Build 。






callbacks.c



Callbacks.c

void on_entry1_changed (GtkEditable *editable,

gpointer user_data)

{

const gchar *text1;

text1 = gtk_entry_get_text(GTK_ENTRY(editable));

printf("text entry : %s/n",text1);

}






, devcpp “win32 ”

:1、 “ ” “ ” 。

2、 “ ” “ ” “win32 ”。

3、 “ ”。



、 , , 。
: linux , , glade build , autogen.sh make ,
src .






comboboxentry1 = gtk_combo_box_entry_new_text ();





gtk_combo_box_append_text (GTK_COMBO_BOX (comboboxentry1), _("one"));





text1 = gtk_combo_box_get_active_text(combobox);






、 Glade
:1、 Glade

2、 window ( :400,300)、fixed positions( ) 、comboboxentry( ) 。

3、 , comboboxentry1 Item :one ( )、two ( )、three ( )、

4、 comboboxentry1 changed ( :object comboboxentry1)。

5、 , 。






, , “win32 ”。



callbacks.h


void on_comboboxentry1_changed (GtkComboBox *combobox,

gpointer user_data);



callbacks.c
void on_comboboxentry1_changed (GtkComboBox *combobox,

gpointer user_data)

{

gchar *text1;

text1 = gtk_combo_box_get_active_text(combobox);

printf("The combo text is : %s /n",text1);

}



、 ,

(toggle button)






GtkWidget *togglebutton1;

togglebutton1 = gtk_toggle_button_new();

togglebutton1 = gtk_toggle_button_new_with_label(“toggle button”);

togglebutton1 = gtk_toggle_button_new_with_mnemonic(“toggle button”);




gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))




gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE)

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE)









:1、 Glade

2、 window ( :300,200)、fixed positions( ) 、toggle button( ) 。

3、 , togglebutton1 label “ ” 。

4、 togglebutton1 clicked ( :object togglebutton1)。

5、 , 。






, “win32 ”。

callbacks.c

void on_togglebutton1_clicked (GtkButton *button,

gpointer user_data)

{

if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))

{ printf("toggle button is on /n"); }

else

{ printf("toggle button is off /n"); }

}




Radio Buttons


:

:


/* interface.c*/



/* */]

GtkWidget *radiobutton1;

GSList *radiobutton1_group = NULL;

GtkWidget *radiobutton2;

GtkWidget *radiobutton3;



/* , radiobutton ,

radiobutton (radiobutton1_group) ,

, radiobutton 。
*/

( : , :1. radiobutton1.
2. radiobutton1 , radiobutton1.
3. radiobutton, , radiobutton1.
)
radiobutton1 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton1"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton1), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1));



radiobutton2 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton2"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton2), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton2));



radiobutton3 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton3"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton3), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton3));



( ):
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1))



、 Glade
:1、 glade

     2、 (400,300)、 、 。

     3、 , toggled ,object :radiobutton1,radiobutton2,radiobutton3。

     4、 , 。


Interface.c

g_signal_connect_swapped ((gpointer) radiobutton1, "toggled",

G_CALLBACK (on_radiobutton1_toggled),

GTK_OBJECT (radiobutton1));

g_signal_connect_swapped ((gpointer) radiobutton2, "toggled",

G_CALLBACK (on_radiobutton2_toggled),

GTK_OBJECT (radiobutton2));

g_signal_connect_swapped ((gpointer) radiobutton3, "toggled",

G_CALLBACK (on_radiobutton3_toggled),

GTK_OBJECT (radiobutton3));



Callbacks.h

void on_radiobutton1_toggled (GtkToggleButton *radiobutton1,

gpointer user_data);

void on_radiobutton2_toggled (GtkToggleButton *radiobutton2,

gpointer user_data);



void on_radiobutton3_toggled (GtkToggleButton *radiobutton3,

gpointer user_data);



Callbacks.c



void on_radiobutton1_toggled (GtkToggleButton *radiobutton1,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1)))

{

printf("radiobutton1 is True/n");

}

}



void on_radiobutton2_toggled (GtkToggleButton *radiobutton2,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton2)))

{

printf("radiobutton2 is True/n");

}

}



void on_radiobutton3_toggled (GtkToggleButton *radiobutton3,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton3)))

{

printf("radiobutton3 is True/n");

}

}

좋은 웹페이지 즐겨찾기