Button 有没有一种方法可以让我创建一个;“边界”;在gtk中围绕一个字符串?

Button 有没有一种方法可以让我创建一个;“边界”;在gtk中围绕一个字符串?,button,gtk,border,Button,Gtk,Border,我的第一次GUI体验可以追溯到1996年使用Xaw`和Xlib。2004年后,我放弃了,回到了一家CLI。现在我需要创建一个小GUI“widget[?]”,它的底部以“0”开头,上面有两个按钮“inc”和“dec”。在这上面,顶部是字符串 文件名 inc/dec按钮增加/减少文件名 例如,如果用户在底部键入speak,则“0”将变为 说0.0.text。inc/reduce按钮将向上或向下更改底部字符串,而不是低于0 我现在正试图让“0”或“.0.text”脱颖而出。我已经尝试将filename

我的第一次GUI体验可以追溯到1996年使用Xaw`和Xlib。2004年后,我放弃了,回到了一家CLI。现在我需要创建一个小GUI“widget[?]”,它的底部以“0”开头,上面有两个按钮“inc”和“dec”。在这上面,顶部是字符串

文件名

inc/dec按钮增加/减少文件名

例如,如果用户在底部键入speak,则“0”将变为

说0.0.text。inc/reduce按钮将向上或向下更改底部字符串,而不是低于0

我现在正试图让“0”或“.0.text”脱颖而出。我已经尝试将filename.N.text转换成gtk按钮。gcc要么核心,要么拒绝编译

有谁能建议在“0”周围加上一个边界,或者让它脱颖而出


非常感谢。

我不确定边框效果是否立即可用,但还有其他与字体相关的更改,您可以使用
gtk\u label\u set\u markup
突出显示文本。当计数器达到0时,您也可以使用
gtk\u widget\u set\u 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;
}
/*
*编译:gcc`pkg config--cflags--libs gtk+-2.0`-Wall-Wextra-Werror标签示例.c-o标签示例
*/
#包括
#包括
静态整数计数器=0;
静态GtkWidget*标签;
静态字符*后缀=“.txt”;
静态字符*前缀;
静态空隙
更新标签(无效)
{
字符缓冲区[1024];
memset(&buffer,0,sizeof buffer);
/*如果计数器<1,则使用标记突出显示文本*/
如果(计数器<1)
{
if(前缀)
g_snprintf(缓冲区,1023,“%s%d%s”,前缀、计数器、后缀);
其他的
g_snprintf(缓冲区,1023,“%d%s”,计数器,后缀);
gtk_标签_集合_标记(gtk_标签(标签),缓冲区);
}
其他的
{
if(前缀)
g_snprintf(缓冲区,1023,“%s%d%s”,前缀、计数器、后缀);
其他的
g_snprintf(缓冲区,1023,“%d%s”,计数器,后缀);
gtk_标签(gtk_标签(标签),缓冲器);;
}
}
静态空隙
inc_按钮点击cb(GTK按钮*按钮,gpointer数据)
{
(作废)按钮;
GtkWidget*dec_按钮=数据;
计数器++;
/*根据计数器改变减量按钮的灵敏度*/
如果(计数器>0&!gtk小部件敏感(dec按钮))
gtk_控件设置敏感(dec_按钮,真);
/*更新标签以显示更新的计数器*/
更新_标签();
返回;
}
静态空隙
dec_按钮点击cb(GTK按钮*按钮,gpointer数据)
{
(b)数据;
计数器--;
/*根据计数器改变减量按钮的灵敏度*/
如果(计数器<1&>k_小部件是敏感的(gtk_小部件(按钮)))
gtk_小部件设置敏感(gtk_小部件(按钮),错误);
/*更新标签以显示更新的计数器*/
更新_标签();
返回;
}
静态空隙
条目\更改\ cb(GtkEditable*可编辑,gpointer数据)
{
(b)数据;
/*呼叫方必须释放文本,所以呼叫g_free*/
g_free(前缀);
/*获取完整的文本*/
前缀=gtk_可编辑_获取_字符(可编辑,0,-1);
/*更新标签以显示更新的前缀*/
更新_标签();
返回;
}
内部主(空)
{
GtkWidget*按钮公司;
GtkWidget*按钮_dec;
GtkWidget*入口标签;
GtkWidget*条目;
GtkWidget*窗口;
GtkWidget*vbox;
gtk_init(NULL,NULL);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
g_信号连接(窗口,“销毁”,g_回调(gtk_主退出),空);
vbox=gtk_vbox_new(假,5);
gtk_容器添加(gtk_容器(窗口),vbox);
标签=gtk_标签_新(“”);
更新_标签();
按钮dec=gtk按钮新按钮,带有标签(“减少计数器”);
g_信号_连接(按钮_dec,“点击”,g_回调(按钮_click_cb),空);
gtk小部件设置敏感(按钮dec,FALSE);
button_inc=gtk_button_new_,带有标签(“增加计数器”);
g_信号连接(按钮“点击”,g_回叫(按钮“点击”,按钮“取消”);
entry_label=gtk_label_new(“要在下面的条目中显示的条目前缀:”);
entry=gtk_entry_new();
g_信号连接(条目“已更改”,g_回调(条目\u已更改\u cb),NULL);
gtk_盒包装开始(gtk_盒(vbox),标签,0,0,0);
gtk_-box_-pack_-start(gtk_-box(vbox),按钮公司,0,0,0);
gtk_盒_包_启动(gtk_盒(vbox),按钮_dec,0,0,0);
gtk_盒包装开始(gtk_盒(vbox),输入标签,0,0,0);
gtk_盒包装开始(gtk_盒(vbox),输入,0,0,0);
gtk_小部件_全部显示(窗口);
gtk_main();
g_free(前缀);
返回0;
}

希望这有帮助!

Bzzt!我说“谢谢大家“然后试图编辑并询问有关上述代码的另一个问题。我将其修改为在静态char*前缀中重新加载。前缀是文件名。说“聊天”或“交谈”或“交流”。我添加的内容会导致输入空间中的任何内容爆炸。在哪里发布我的补充内容?您可以使用编辑按钮编辑您的问题。否则,您可以像以前一样添加注释。你能澄清一点吗?我不能确切地理解这个问题。你从哪里读到静态字符*前缀?嗯。如果你能读到我的文件,从你的文件中稍加修改并通过can-n运行,那么你会看到:“在下面键入文件名前缀:”你能发布你的代码吗?在这里(有疑问……评论中不可能),或者在像pastebin.com这样的网站上发布链接?