styleSheet's individuell zusammenstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
ich befasse mich gerade damit, ob es eine Möglichkeit gibt, styleSheet's individuell zusammenstellen.

Meine Überlegung ist, dass man ein einheitliches Layout für die eigene Projekte erreichen möchte.
Im folgendem Beispiel, erstelle ich einen jeweils eigenen styleSheet. Diese möchte ich je nach Anwendung kombinieren können (zusammenführen).

Code: Alles auswählen

TabBarStyleSheet = """
	QTabBar{
		background: orange;
		}
	QTabBar::tab{
		height: 40px;
		min-width: 200px;
		font-size: 16px;
		font-weight: bold;
		border-radius: 5px;
		}
	QTabBar::tab:selected{
		background: darkred;
		color: yellow;
		}
	QTabBar::tab:!selected{
		background: darkgrey;
		color: orange;
		}
ScrollBarStyleSheet = """
	QScrollBar::handle {
		background: orange;
		border-radius: 9px;
		}
	QScrollBar::handle::pressed {
		background : orange;
		}
	QScrollBar:horizontal {
		background-color: grey;
		height: 18px;
		}
	QScrollBar::left-arrow:horizontal {
		background: red;
		height: 40px;
		width: 40px
		}
	QScrollBar::right-arrow:horizontal {
		background: red;
		height: 40px;
		}
	QScrollBar:vertical {
		background-color: grey;
		width: 18px;
		}
	QScrollBar::up-arrow:vertical {
		background: red;
		height: 40px;
		width: 40px
		}
	QScrollBar::down-arrow:vertical {
		background: red;
		height: 40px;
		width: 40px
		}
	"""
Wie im obigen Beispiel, möchte ich die styleSheet's TabBarStyleSheet und ScrollBarStyleSheet zusammenführen, um dieses dann mit self.setStyleSheet(MeinStyleSheet) zu übergeben.

Ich habe dazu, folgendes versucht, was aber nicht funktioniert, obwohl es in der visuellen Ausgabe passen müsste.

Code: Alles auswählen

tabbarStyle = [(x + '}') for x in TabBarStyleSheet.split('}')][:-1]
scrollbarStyle = [(x + '}') for x in ScrollBarStyleSheet.split('}')][:-1]
for x in tabbarStyle:
	scrollbarStyle.append(x)
print(scrollbarStyle)
ScrollBarStyle = '"""{}"""'.format(''.join([x for x in scrollbarStyle]))
print(ScrollBarStyle)
Ich hoffe, dass Ihr mir sagen könnt, wie dies richtig gemacht wird!

Grüße Nobuddy
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

etwa so

Code: Alles auswählen

def meinStyleSheet(self):
    return """
    QTabBar{
    background: orange;
        }
    QTabBar::tab 
        {
        height: 40px;
        min-width: 200px;
        font-size: 16px;
        font-weight: bold;
        border-radius: 5px;
        }
    QTabBar::tab:selected 
        {
        background: darkred;
        color: yellow;
        }
    QTabBar::tab:!selected 
        {
        background: darkgrey;
        color: orange;
        }
    QScrollBar::handle 
        {
        background: orange;
        border-radius: 9px;
        }
    QScrollBar::handle::pressed 
        {
        background : orange;
        }
    QScrollBar:horizontal 
        {
        background-color: grey;
        height: 18px;
        }
    QScrollBar::left-arrow:horizontal 
        {
        background: red;
        height: 40px;
        width: 40px
        }
    QScrollBar::right-arrow:horizontal 
        {
        background: red;
        height: 40px;
        }
    QScrollBar:vertical {
        background-color: grey;
        width: 18px;
        }
    QScrollBar::up-arrow:vertical 
        {
        background: red;
        height: 40px;
        width: 40px
        }
    QScrollBar::down-arrow:vertical 
        {
        background: red;
        height: 40px;
        width: 40px
        }
    """
OS: LMDE5 *** Homepage *** Github Seite
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

Habe diese Lösung inzwischen gefunden, die funktioniert und meiner Vorstellung entspricht:

Code: Alles auswählen

self.setStyleSheet(ScrollBarStyleSheet + TabBarStyleSheet)
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

Anschließend, habe ich eine Datei Style.py erstellt in der nach obigem Beispiel von Axel-WAK, eine Funktion pro Style (scrollBar, tabBar ...) erstellt.
So lassen sich die verschiedenen Styles, indiviudell zusammenstellen.
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Funktionen/Methoden die konstante Werte liefern sind nicht so wirklich sinnvoll. Warum nicht einfach Konstanten definieren‽
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

Konstanten definieren?
Kannst Dur mir ein Beispiel aufzeigen?
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

``ANSWER = 42`` definiert die Konstante `ANSWER` mit dem Wert 42. Also eigentlich die Variable, weil man das in Python ja jederzeit wieder ändern kann, aber per Konvention ändert man etwas mit Namen KOMPLETT_IN_GROSSBUCHSTABEN nicht mehr. Kann man auch als Klassenattribut definieren falls es nicht auf Modulebene sein soll.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

Stylesheets sind css, soll man das in Konstanten ummodeln?
OS: LMDE5 *** Homepage *** Github Seite
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

@Axel-WAK: Man könnte ja ebenso fragen "Stylesheets sind CSS, sollte man die als konstante Rückgabe einer Funktion nutzen?"
Ich würde wahrscheinlich sagen: Eher Konstanten als eine Funktion, die sich wie ein Konstante verhält.
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

Es ist doch einfach nur ein String.
Damit man nicht bei jedem Widget schreiben muß

widget.setStyleSheet('background: blue; ...')

fasst man alle in einem String zusammen. Es ist übersichtlicher und man kann schnell mal was ändern.
OS: LMDE5 *** Homepage *** Github Seite
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Axel-WAK: Je eben, es ist einfach nur eine Zeichenkette, darum macht es keinen Sinn da *Methoden* für zu schreiben die einfach nur jeweils eine statische Zeichenkette, also eine Konstante zurückgeben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oder man benutzt gleich den qrc Mechanismus von Qt dafür.
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

qrc Mechanismus von Qt, kannst Du mir da ein Beispiel zeigen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

__deets__, Danke für den Link!
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

QRC, sieht interessant aus.
Die qrc-Datei muss im gleichen Ordner sein, wie in diesem Link-Beispiel die Icon's?
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

__deets__ hat geschrieben: Dienstag 13. Dezember 2022, 23:29 Oder man benutzt gleich den qrc Mechanismus von Qt dafür.
Damit kann man Farben von Widgets ändern?
OS: LMDE5 *** Homepage *** Github Seite
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Damit kann man Dinge wie Stylesheets, Bilder und Co in Form einer Code-Datei mitliefern, und durch entsprechende URIs referenzieren.
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

Widget Stylesheets in qrc habe ich noch nie gesehen, dafür werden doch eher qss Dateien verwendet.
OS: LMDE5 *** Homepage *** Github Seite
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

qrc enthält alle Formen von Dateien. PNGs genauso wie auch QSS. Oder was auch immer man will. Man kann weiter mit Dateien arbeiten (zb mit syntax highlighting für CSS/QSS), aber die dann in eine resource Datei bündeln. Statt die ganzen Dateien ausliefern zu müssen.
Antworten