2011-12-04 2 views
0

제 첫 GUI 경험은 1996 년 Xaw`와 Xlib로 돌아갑니다. 2004 년 이후 나는 포기하고 다시 CLI로 갔다. 이제 하단의 "0"으로 시작하는 작은 GUI "widget [?]"을 만들 필요가 있습니다. 두 개의 버튼 "inc"와 "dec"이 있습니다. 이 위의 상단에있는 문자열gtk에서 문자열 주위에 "테두리"를 만들 수있는 방법이 있습니까?

이 _ ___

INC/DEC 버튼이 증가/파일 이름을 감소 파일 이름입니다.

예를 들어, 말하는에서 사용자 유형은, 아래쪽에 "0"

speak.0.text 될 것입니다 경우. 증가/감소 버튼은 0이 아닌 아래쪽 문자열을 위 또는 아래로 바꿉니다.

"0"또는 ".0.text"가 눈에 띄도록 만들기 위해 노력하고 있습니다. .N.text GCC 코어 중 하나 GTK 버튼을 누릅니다.로 또는 컴파일 거부합니다.

사람이 "0"주위에 테두리를 넣어 또는 그렇지 않으면 눈에 띄는 muchly?

감사 만드는 방법을 제안 할 수 있습니다.

답변

2

테두리 종류의 효과를 즉시 사용할 수 있는지 확실하지 않지만 Pango Markup을 사용하여 변경할 수있는 다른 글꼴 관련 변경 사항이 있습니다. gtk_label_set_markup을 사용하여 텍스트를 밝게하십시오. 카운터가 0에 도달하면 더 이상 감소시킬 수 없도록 감소 버튼을 gtk_widget_set_sensitive을 사용하여 민감하지 않게 만들 수도 있습니다. 다음 샘플 코드는 참조 용 :이 도움이

/* 
* Compilation : gcc `pkg-config --cflags --libs gtk+-2.0` -Wall -Wextra -Werror label-sample.c -o label-sample 
*/ 

#include <gtk/gtk.h> 
#include <string.h> 

static int counter = 0; 
static GtkWidget *label; 
static char *suffix = ".txt"; 
static char *prefix; 


static void 
update_label(void) 
{ 
    char buffer[1024]; 
    memset(&buffer, 0, sizeof buffer); 

    /*If counter is < 1, use markup to highlight text*/ 
    if(counter < 1) 
    { 
     if(prefix) 
      g_snprintf(buffer, 1023, "<span foreground=\"red\" background=\"yellow\" size=\"x-large\">%s%d%s</span>",prefix, counter, suffix); 
     else 
      g_snprintf(buffer, 1023, "<span foreground=\"red\" background=\"yellow\" size=\"x-large\">%d%s</span>", counter, suffix); 
     gtk_label_set_markup(GTK_LABEL(label), buffer); 
    } 
    else 
    { 
     if(prefix) 
      g_snprintf(buffer, 1023, "%s%d%s", prefix, counter, suffix); 
     else 
      g_snprintf(buffer, 1023, "%d%s", counter, suffix); 
     gtk_label_set_label(GTK_LABEL(label), buffer); 
    } 
} 

static void 
inc_button_click_cb(GtkButton *button, gpointer data) 
{ 
    (void)button; 
    GtkWidget *dec_button = data; 
    counter++; 
    /* Change senstivity of the decrement button based on counter*/ 
    if(counter > 0 && !gtk_widget_is_sensitive(dec_button)) 
     gtk_widget_set_sensitive(dec_button, TRUE); 
    /* Update label to show updated counter */ 
    update_label(); 
    return; 
} 

static void 
dec_button_click_cb(GtkButton *button, gpointer data) 
{ 
    (void)data; 
    counter--; 
    /* Change senstivity of the decrement button based on counter*/ 
    if(counter < 1 && gtk_widget_is_sensitive(GTK_WIDGET(button))) 
     gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE); 
    /* Update label to show updated counter */ 
    update_label(); 
    return; 
} 


static void 
entry_changed_cb(GtkEditable *editable, gpointer data) 
{ 
    (void)data; 
    /* Caller has to free the text, so call g_free */ 
    g_free(prefix); 
    /* Get the complete text */ 
    prefix=gtk_editable_get_chars(editable,0, -1); 
    /* Update label to show updated prefix */ 
    update_label(); 
    return; 
} 

int main(void) 
{ 
    GtkWidget *button_inc; 
    GtkWidget *button_dec; 
    GtkWidget *entry_label; 
    GtkWidget *entry; 
    GtkWidget *window; 
    GtkWidget *vbox; 

    gtk_init(NULL, NULL); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    vbox = gtk_vbox_new(FALSE, 5); 
    gtk_container_add(GTK_CONTAINER(window), vbox); 

    label = gtk_label_new(""); 
    update_label(); 

    button_dec = gtk_button_new_with_label("Decrease counter"); 
    g_signal_connect(button_dec, "clicked", G_CALLBACK(dec_button_click_cb), NULL); 
    gtk_widget_set_sensitive(button_dec, FALSE); 

    button_inc = gtk_button_new_with_label("Increase counter"); 
    g_signal_connect(button_inc, "clicked", G_CALLBACK(inc_button_click_cb), button_dec); 

    entry_label = gtk_label_new("Entry prefix to be displayed in the entry below:"); 

    entry = gtk_entry_new(); 
    g_signal_connect(entry,"changed", G_CALLBACK(entry_changed_cb), NULL); 

    gtk_box_pack_start(GTK_BOX(vbox), label, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), button_inc, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), button_dec, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), entry_label, 0, 0, 0); 
    gtk_box_pack_start(GTK_BOX(vbox), entry, 0, 0, 0); 

    gtk_widget_show_all(window); 

    gtk_main(); 

    g_free(prefix); 

    return 0; 
} 

희망!

+0

Bzzt! 나는 "모두에게 감사"라고 말하고 위의 코드에 대해 다른 질문을하고 편집을 시도했다. 정적 char * 접두사가되도록 수정했습니다. 접두사는 파일 이름입니다. '채팅'또는 '말하기'또는 '의사 소통'이라고 말하십시오. 나의 추가는 입구 공간에서 타격을 가하는 무엇이라도 일으키는 원인이된다. 추가 사항을 게시 할 위치는 어디입니까? –

+0

편집 버튼을 사용하여 질문을 편집 할 수 있습니다. 그렇지 않으면 이미 수행 한 것처럼 주석을 추가 할 수 있습니다. 조금 명확히 해 주시면 문제를 정확히 이해할 수 없습니다. 정적 char * 접두어는 어디에서 읽습니까? –

+0

hm. 내 파일을 읽을 수 있었고 약간 수정 한 후 실행할 수 있습니다. -n을 입력하면 파일 이름 접두사를 아래에 입력하십시오 : " –

관련 문제