Seite 1 von 1

Textfarbe eines Button ändern

Verfasst: Dienstag 5. Mai 2009, 08:12
von wuf
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:

Verfasst: Dienstag 5. Mai 2009, 09:20
von Rebecca
Generell geht sowas mit SetForegroundColour, geht das auf Buttons nicht?

Verfasst: Dienstag 5. Mai 2009, 11:04
von wuf
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:

Verfasst: Dienstag 5. Mai 2009, 11:24
von Rebecca
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.

Verfasst: Dienstag 5. Mai 2009, 11:35
von wuf
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:

Verfasst: Dienstag 5. Mai 2009, 11:59
von Rebecca
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.

Verfasst: Dienstag 5. Mai 2009, 13:20
von wuf
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:

Verfasst: Dienstag 5. Mai 2009, 17:37
von Rebecca
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.

Verfasst: Dienstag 5. Mai 2009, 18:33
von Leonidas
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.

Verfasst: Dienstag 5. Mai 2009, 22:01
von wuf
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: