[gtkmm] Farbe der Widgets lässt sich nicht verändern



  • Hallo,

    ich versuche bislang vergeblich die Vorder- bzw. Hintergrundfarbe meiner Widgets (wie z.B. Gtk::Button) zu ändern.
    Eigentlich sollte dies ja mithilfe der Funktionen modify_bg () und modify_fg () gehen, jedoch zeigen diese keine Wirkung. Beispiel:

    Gtk::Button button1 ("Test");
    button1.modify_bg (Gtk::STATE_NORMAL, Gdk::Color ("red"));
    

    Eigentlich sollte dies doch den Button rot färben, aber der Button bleibt unverändert grau.

    Weiß jemand, woran das liegt?

    Danke



  • Also bei mir wird er rot. Hier ist mal mein Code:

    #include <gtkmm.h>
    
    class Window : public Gtk::Window
    {
    public:
        Window() : button_("Test")
        {
        	button_.modify_bg(Gtk::STATE_NORMAL, Gdk::Color("red"));
    		add(button_);
            show_all();
        }
    private:
    	Gtk::Button button_;
    };
    
    int main(int argc, char** argv)
    {
        Gtk::Main kit(argc, argv);
        Window win;
        kit.run(win);
    }
    


  • Auch mit deinem Code bleibt der Button bei mir grau! Gibt es vielleicht besondere Optionen beim Compilieren oder irgendwelche Zusätze für gktmm die das erst ermöglichen.

    Trotzdem Danke



  • basti33 schrieb:

    Gibt es vielleicht besondere Optionen beim Compilieren oder irgendwelche Zusätze für gktmm die das erst ermöglichen.

    Nee, eigentlich nicht. Versuch mal bei fg() bzw. bg() statt Gtk::STATE_NORMAL widget.get_state() zu probieren ...



  • KasF schrieb:

    Versuch mal bei fg() bzw. bg() statt Gtk::STATE_NORMAL widget.get_state() zu probieren ...

    Funktioniert leider auch nicht.

    Edit: Ist es vielleicht möglich, dass Betriebssystem (Kubuntu 7.04) das einfärben verhindert?



  • Ahh Kubuntu, das kann natürlich einiges erklären, aber helfen kann ich dir leider dabei nicht 😉



  • KasF schrieb:

    Ahh Kubuntu, das kann natürlich einiges erklären, aber helfen kann ich dir leider dabei nicht 😉

    Unter Windows funktioniert es leider auch nicht. Ist das auch normal?





  • basti33 schrieb:

    Unter Windows funktioniert es leider auch nicht. Ist das auch normal?

    Stimmt. Bei mir funktionierts auch nicht. Habe seit LiveTip nicht mehr viel mit gtkmm gemacht und habe es gerade nochmal aufgesetzt.

    Der Code vom joomoo funktioniert bei mir auch nicht, obwohl ich es in LiveTip auch genau so habe ( im Source mal nachgeschaut ).

    Irgendwas hat sich wohl in der neuen Version geändert, hatte ehe immer viele merkwürdige Probleme mit gtkmm, was die Farbgestalltung etc. betrifft.



  • basti33 schrieb:

    KasF schrieb:

    Ahh Kubuntu, das kann natürlich einiges erklären, aber helfen kann ich dir leider dabei nicht 😉

    Unter Windows funktioniert es leider auch nicht. Ist das auch normal?

    Evtl. dürfte dieser Thread für dich interessant sein: http://www.mail-archive.com/gtkmm-list@gnome.org/msg05678.html

    Bzw. allgemein: http://www.mail-archive.com/search?q=color&l=gtkmm-list%40gnome.org



  • Hallo,

    wie ich jetzt herausgefunden habe, existiert dieses Problem nur bei Buttons. Frames, die ich in EventBoxes gepackt habe, lassen sich ohne Probleme mit der oben genannten Methode einfärben. Vielleicht weiß ja noch jemand, wie sich dieses Problem beim Button umgehen lässt und falls nicht, kann man diesen Post ja als kleinen Hinweis ansehen 😉 .



  • class Window : public Gtk::Window
    {
    public:
        Window() : StartBut("Test")
        {
            Glib::RefPtr<Gtk::Style> style = Gtk::Style::create();
            style->set_bg(StartBut.get_style(), Gdk::Color("red"));
    
            StartBut.set_style(style);
    
            add(StartBut);
            show_all();
        }
    private:
        Gtk::Button StartBut;
    };
    
    int main(int argc, char** argv)
    {
        Gtk::Main kit(argc, argv);
        Window win;
        kit.run(win);
    }
    

    🕶



  • Ist das jetzt ein Workaround oder beabsichtigt? 😕



  • krischan111 schrieb:

    Ist das jetzt ein Workaround oder beabsichtigt? 😕

    Das ist das was bei mir funktioniert 🙂 ( das andere nämlich nicht )



  • krischan111 schrieb:

    Ist das jetzt ein Workaround oder beabsichtigt? 😕

    Es ist beabsichtigt. Ich hab mal genauer nachgeforscht und es hat sich rausgestellt, dass man jetzt verstärkt das styles-Konzept fahren wird.



  • GPC schrieb:

    dass man jetzt verstärkt das styles-Konzept fahren wird.

    Ahh, interessant das zu wissen.



  • KasF schrieb:

    GPC schrieb:

    dass man jetzt verstärkt das styles-Konzept fahren wird.

    Ahh, interessant das zu wissen.

    Die Informationspolitik vom gtkmm-Team ist miserabel 😕



  • GPC schrieb:

    Es ist beabsichtigt. Ich hab mal genauer nachgeforscht und es hat sich rausgestellt, dass man jetzt verstärkt das styles-Konzept fahren wird.

    Hat das jetzt irgendwelche konkreten Vorteile?



  • basti33 schrieb:

    GPC schrieb:

    Es ist beabsichtigt. Ich hab mal genauer nachgeforscht und es hat sich rausgestellt, dass man jetzt verstärkt das styles-Konzept fahren wird.

    Hat das jetzt irgendwelche konkreten Vorteile?

    Na ja, abgesehen davon, dass es funktioniert kann man den Smart-Pointer, der den Style beinhaltet natürlich rumreichen, um so auch andere Widgets zu modifizieren. Ist im Prinzip nur eine weiter Abstraktionsebene.


Anmelden zum Antworten