Seite 1 von 2

styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 10:18
von Nobuddy
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

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 10:27
von Axel-WAK
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
        }
    """

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 10:41
von Nobuddy
Habe diese Lösung inzwischen gefunden, die funktioniert und meiner Vorstellung entspricht:

Code: Alles auswählen

self.setStyleSheet(ScrollBarStyleSheet + TabBarStyleSheet)

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 15:19
von Nobuddy
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.

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 17:17
von __blackjack__
Funktionen/Methoden die konstante Werte liefern sind nicht so wirklich sinnvoll. Warum nicht einfach Konstanten definieren‽

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 20:22
von Nobuddy
Konstanten definieren?
Kannst Dur mir ein Beispiel aufzeigen?

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 20:33
von __blackjack__
``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.

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 21:08
von Axel-WAK
Stylesheets sind css, soll man das in Konstanten ummodeln?

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 21:18
von sparrow
@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.

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 22:28
von Axel-WAK
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.

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 23:11
von __blackjack__
@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.

Re: styleSheet's individuell zusammenstellen

Verfasst: Dienstag 13. Dezember 2022, 23:29
von __deets__
Oder man benutzt gleich den qrc Mechanismus von Qt dafür.

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 08:43
von Nobuddy
qrc Mechanismus von Qt, kannst Du mir da ein Beispiel zeigen?

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 09:19
von __deets__

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 10:23
von Nobuddy
__deets__, Danke für den Link!

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 12:48
von Nobuddy
QRC, sieht interessant aus.
Die qrc-Datei muss im gleichen Ordner sein, wie in diesem Link-Beispiel die Icon's?

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 13:47
von Axel-WAK
__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?

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 14:56
von __deets__
Damit kann man Dinge wie Stylesheets, Bilder und Co in Form einer Code-Datei mitliefern, und durch entsprechende URIs referenzieren.

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 15:13
von Axel-WAK
Widget Stylesheets in qrc habe ich noch nie gesehen, dafür werden doch eher qss Dateien verwendet.

Re: styleSheet's individuell zusammenstellen

Verfasst: Mittwoch 14. Dezember 2022, 16:12
von __deets__
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.