GTK+3 ラベルのテキスト色の変更 (Raspberry Pi)

GTK+3 ラベルのテキスト色の変更 (Raspberry Pi)

実行時にラベルのテキストの色を動的に変更しようとしています。私はCSSスタイルを適用してみましたが、廃止予定の2つの方法を試しましたが、どちらも機能しません。できますか?そうでなければ、なぜそれほど簡単なことはできませんか?

CSSスタイルを動的に適用すると、部分的に機能します。

.pinkStyle {
    background-color: rgb(241, 135, 135);
    color: black;
}

ランニング中に背景がピンクに変わるのがわかります。しかし、テキストは白のままです。

答え1

マブソサ。私がしたことによって他の人が苦しむのを防ぐために、この内容を記録しています。

実行時にテキストを制御するには、どの状況でもGladeを使用してプロパティを編集して前景色を設定しないでください。これにより、テキストの色が永久に設定され、実行時にCSSの変更、pangoタグ、gtk_widget_modify_fgなどの廃止された機能に触れることができなくなります。

CSSを使用してラベルの背景色を変更できますが、テキストに固有の色と背景を適用するには、gtk_label_set_markupを使用しました。

<span background=\"#0022ff\" foreground=\"#ff0044\">

効果がありました。 Gladeのすべてのタグからすべての属性を削除した後。

GTKは悪夢です。以前はLinuxでWindowsを憧れさせたものにも触れたことがなかったが、今回はそうだった。

答え2

GTKは醜いです。問題を解決する代わりにパッチを適用します。

とにかく、ここで始めるものはraspberrypi.orgフォーラムにあります。 err は int で、btcprice と oldprice は浮動小数点数で、 markup と errstr は gchar です。

if (err == 0) {
  if (btcprice > oldprice)
    markup = g_strdup_printf("<span foreground='green'>%.2f</span>",btcprice);
  else
    markup = g_strdup_printf("<span foreground='red'>%.2f</span>",btcprice);
 } else {
   markup = g_strdup_printf("<span foreground='orange'>%s</span>",errstr);
 }
 gtk_label_set_markup(GTK_LABEL(pLabel),markup);
 g_free(markup);

価格が下がるとテキストの色は赤になり、価格が上がるとテキストの色は緑になります。エラーが発生した場合、テキストの色はオレンジ色です。 g_strdup_printf() は printf や snprintf と少し似ていますが、浮動小数点数を浮動小数点数の値によって色が変化する文字列に変換します。

答え3

以下は、ラベルクリックに応答するコールバック関数である上記のコードのバリエーションです(Button_press_event シグナル)ラベルの現在のテキストに基づいてラベルのテキストと色を変更します。ラズベリーパイではうまくいきます。とても感謝しています。

void on_block_01_pwr_button_press_event()
{   GtkWidget *label=GTK_WIDGET(block_01_pwr);
    const gchar * txt;
    char *format;
    gchar *markup;
    txt=gtk_label_get_text((GtkLabel *) block_01_pwr);
    int x=strcmp("pwr #1", txt);
    if(x==0)
    {   txt="pwr #2";
        format="<span foreground=\"#40c0c0\">%s</span>";
        markup=g_markup_printf_escaped(format,txt);
    }
    else 
    {   x=strcmp("pwr #2", txt);
        if(x==0){txt="pwr off";
        format="<span foreground=\"#999999\">%s</span>";
        markup=g_markup_printf_escaped(format,txt);
                }
        else 
        {txt="pwr #1";
    format="<span foreground=\"#000000\">%s</span>";
    markup=g_markup_printf_escaped(format,txt);
        }
    }
    gtk_label_set_text((GtkLabel *) block_01_pwr, txt);
    gtk_label_set_markup(GTK_LABEL (label), markup);
    g_free(markup);
// Add code here to set this block's power pack # (or off) and data array entry
}

関連情報