Textfarbe eines Button ändern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo wxPython Freunde

Habe eine simple Frage. Bei einem Button-Widget ist es möglich die Hingrundfarbe mit folgender Anweisung zu ändern:

Code: Alles auswählen

button.SetBackgroundColour("steelblue3")
Ist es auch möglich die Farbe des Textes auf dem Button zu ändern?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Generell geht sowas mit SetForegroundColour, geht das auf Buttons nicht?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Rebecca

Danke für deine Antwort. Für mich war dies auch das naheliegenste. Aber das setzen dieser Eigenschaft hatte keinen Einfluss auf die Schriftfarbe. Die Schrift bleibt schwarz. Hingegen übernimmt der gepunkte Markierungsrahmen um die Schrift, wenn die Schaltfläche aktiviert wurde diese Farbe an.

Mein Setup hier ist:
SuSE 11.0
KDE 3.5.9
Python 2.5

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Das ist anscheinend abhaengig vom GTK-Theme oder von der GTK-Render-Engine (KDE hat damit nichs zu tun).

Bei meiner Standard-Theme funktioniert Foreground-Colour, aber nicht Background (hier verwendet die Theme ein Bild und imo den pixbuf-Renderer). Ganz ohne Theme funktioniert sowohl Foreground als auch Background.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Rebecca

Der Begriff 'Standard-Theme' sagt mir leider nichts (Bin Novice in wxPython). Ist das eine Konfigurationsdatei die auf eigene Wünsche angepasst werden kann? Wie können diese 'Standard-Theme' verändert werden?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mit Standard-Theme meine ich die GTK-Theme, die ich benutze. Das hat nichts mit wx zu tun, sondern mit GTK. Normalerweise stehen solche Sachen in ~/.gtkrc-2.0, wenn du die Datei wegschiebst, sollten deine GTK-Anwendungen in ganz langweiligem Grau erscheinen, und dies ist auch der Fall wo sowohl Foreground Colour als auch Background Colour bei mir funktionieren.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Rebecca

Danke für deine Tipps. Ich habe die von dir erwähnten Datei 'gtkrc-2.0' bei mir unter folgendem Pfad gefunden:

Code: Alles auswählen

/home/wuf/.kde/share/config/
Es gib insgesamt zwei von diesen Dateien. Das sind:

Code: Alles auswählen

gtkrc und gtkrc-2.0
Ich habe beide Dateien aus dem Verzeichnis herausgenommen und meine Testskript ausgeführt. Die Schrift auf der Schaltfläche bleibt schwarz.

Übrigens, wenn ich mich als Benutzer abmelde und dann wieder anmelde werden die beiden fehlenden Dateien (gtkrc und gtkrc-2.0) wieder automatisch im zugehörigen Verzeichnis erstellt.

Hier mein Testskript:

Code: Alles auswählen

#!/usr/bin/env python
# coding: UTF-8

"""Fenster mit zwei Schaltflächen"""

import wx

class ButtonFrame(wx.Frame):

    def __init__(self):

        self.toggle = False

        wx.Frame.__init__(self, None, -1, "Schaltfläche-Beispiel-1",
            size=(180,80))

        self.button = wx.Button(self,
             id=wx.ID_ANY,
             label="Aus",
             pos=(30,10),
             size=(50,40),
             )
        self.button.SetDefault()

        self.button = wx.Button(self,
             id=wx.ID_ANY,
             label="Aus",
             pos=(100,10),
             size=(50,40),
             )
        self.Bind(wx.EVT_BUTTON, self.on_click, self.button)

        self.button.SetBackgroundColour("steelblue3")
        self.button.SetForegroundColour("yellow")

        self.Centre()
        self.Show(True)

    def on_click(self, event):
        if not self.toggle:
            self.toggle = True
            self.button.SetLabel("Ein!")
        else:
            self.toggle = False
            self.button.SetLabel("Aus")

if __name__ == '__main__':
    win_app = wx.App()
    ButtonFrame()
    win_app.MainLoop()
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

wuf hat geschrieben:Ich habe beide Dateien aus dem Verzeichnis herausgenommen und meine Testskript ausgeführt. Die Schrift auf der Schaltfläche bleibt schwarz.
Dann meint es Suse vielleicht besonders gut mit dir und laedt vorweg noch immer eine systemweite Konfiguration. Ich kann mir vorstellen, dass die gtkrcs in KDE auch "die" gtk-Konfigurationen sind, sondern nur welche, die den KDE-Look nachmachen und die die eigentliche gtkrc dann einbindet (oder einbinden koennte). Evtl. hilft es, eine leere .gtkrc-2.0 im Home-Verzeichnis anzulegen.

Dein Programm oben habe ich gerade nochmal auf meinem PC laufen lassen, dort habe ich ein andere GTK-Theme laufen (mit einer anderen Engine), und dort funktioniert es so, wie du es haben willst. (Python 2.5.4 und wx 2.8.7.1). Ist die Frage, ob man das gewuenschte Verhalten unabhaenging von der Theme/der Engine (ich glaube momentan eher, letztere ist Schuld) erzwingen kann.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rebecca hat geschrieben:Ist die Frage, ob man das gewuenschte Verhalten unabhaenging von der Theme/der Engine (ich glaube momentan eher, letztere ist Schuld) erzwingen kann.
Ich denke nicht dass das geht. Die meisten Engine/Themedesigner finden wohl dass bunte Buttons grässlich sind (eine Einschätzung, die ich durchaus teile, siehe die vielen tollen VB-GUIs). Wenn man eine Information durch die Farbe des Buttons vermitteln will, sollte man generell sein Vorhaben überdenken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Zusammen

@Rebecca: Habe noch weitere Versuche mit den erwähnten Dateien angestellt. Fand noch heraus, dass ich diese Dateien bei SuSE 11.0 nicht extra verschieben muss um sie unwirksam zu machen. Es ist scheinbar auch möglich sie über das Kontrollzentrum -> Erscheinungsbild -> Farben -> Checkbox: Farben auf Nicht-KDE anwenden aus- bzw. einzuschalten. Ihrgendwie verhindert SuSE, dass auf die Standard-Werte von OS-Komponenten abartig einfluss genommen werden kann.
Ich habe mich noch weiter mit wxPython-Widgets beschäftigt und bin auf 'GenBitmapTextButton' gestossen. Mit diesem Widget ist es möglich das zu machen was ich möchte. OK. Rebecca ich danke dir noch für deine grosszügige Unterstützung.

@Leonidas: Du hast recht man sollte sich an die Vorgaben (Standards) halten die ein Betriebssystem vorgibt sonst kann eine Anwendung zum abscheulichen Kunstwerk werden.

Besten Dank! Gruss wuf :wink:
Take it easy Mates!
Antworten