Variable an Stylesheet übergeben

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Hallo miteinander und ein gesundes neues Jahr,

ich habe bei meiner Qt-Anwendung verschiedene Themes und muss aus ästhetischen Gründen bei verschiedenen Controls nachbessern. Das klappt auch alles, bis auf eine Sache : ein Border um ein Textfeld mit der zur Theme gehörenden Farbe.

Hier ein paar Code-Fragmente :

... das Einstellen des Stylesheets und die Übergabe der rgb-Color

Code: Alles auswählen

self.app.setStyleSheet(stylesheet_dark % rgb_lc.name())
... hier ein Teil des Stylesheets :

Code: Alles auswählen

stylesheet_dark: str = """
    QPushButton:checked {
        color: %s;
    }

    QTextEdit:focus {
        border-radius: 1.5;
        border: 1px solid;
        border-color: %s;
    }
        
    QToolTip {
        color: #ffffff;
        background: #2a82da;
        border: 1px solid white;
    }
Bei QPushbutton funktioniert das alles wunderbar, bei QTextedit kommt einFehler.

Code: Alles auswählen

self.app.setStyleSheet(stylesheet_dark % rgb_lc.name())
TypeError: not enough arguments for format string
Ersetze ich %s durch z.B. 'orange' funktioniert es (allerdings eben dann unabhängig vom gewählten Thema) .

Kann mir jemand helfen ?

Danke

Gruß Karsten
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Karsten Böhme: Jedes %s steht für *einen* Wert, dass heisst wenn da zwei %s in der Vorlage sind, dann musst Du da auch zwei Werte für haben und nicht nur einen.

``%`` würde ich dafür aber auch nicht mehr nehmen, sondern die `format()`-Methode mit Schlüsselwortargumenten und entsprechenden Platzhaltern.

Die ``: str``-Typannatotion kannst Du Dir übrigens sparen, das ist ja sowohl menschlichen Lesern als auch Werkzeugen zur Prüfung klar, dass das eine Zeichenkette ist wenn da direkt eine literale Zeichenkette zugewiesen wird. Was benutzt Du denn um die Typannotationen zu prüfen?

Konstantennamen werden in Python KOMPLETT_GROSS geschrieben.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Hallo blackjack,

erst einmal vielen Dank für die schnelle Antwort. Im gewählten Fall kann ich mir 'str', das stimmt, ich nutze die Typannotationen um in meiner IDE (PyCharm) komfortabler arbeiten zu könne. Eine Prüfung führe ich nicht durch. Allerdings ist das Eingeben von Code angenehmer, Member werden dann bei Instanzen etc. gleich angezeigt.

Was Du mit der 'format()'-Methode in diesem speziellen Fall meinst, muss ich erst googlen. Wie sähe das bei der Übergabe an die Methode 'SetStylesheet' dann aus ? Danke

Gruß
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Hallo black_jack,

über die Anwendung der format()-Methode in diesem Fall habe ich nichts gefunden. Allerdings habe ich das mit der Variante %s hinbekommen.

Grüße
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

@__black_jack__

Ich habe das Ganze jetzt mit der 'format'-Methode versucht. Die stolpert über die geschweiften Klammern, welche keine Platzhalter sind. Geht also leider nicht, obwohl es (gerade mit benannten Argumenten) besser ausgesehen hätte. Es bleibt also bei %s

Grüße
Antworten