stylesheet background image resize

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Ernie1412
User
Beiträge: 160
Registriert: Freitag 10. Januar 2020, 20:38

Hallo !
ich will ein Butten mit einem Bild hinterlegen.
ich benutze QT Designer den Style Sheet Editor wie folgt:

Code: Alles auswählen

QPushButton {
background-image: url('C:/Users/erni1/Desktop/Python/MeinProgramm/ui/graphics/Scan_Grün.png');
background-size: cover;
background-color: transparent;
}
wie kann ich den den Pfad relativ wählen also wenn die *.ui in MeinProgramm/ui ist muss ich vom *.py ausgehen oder wo die *.ui sind `?
ich hab alles ausprobiert. irgendwie geht nur komplette Ordner Pfad.

2. Problem:
Das Bild ist 255x255pixel
wie kriege ich das zentral in 100x100 PushButton hin.
in dem Fall zeigt er mir nur im rechten unteren Eck ein Stück vom Bild
Bild
Danke
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man findet zwei Loesungen zu deinem ersten Problem: das Stylesheet mit Variablen zu versehen, und die vorm setzen zu ersetzen. Also sowas wie

url('{BASEPATH}/ui/graphics/Scan.png')

und dann zur Laufzeit den BASEPATH bestimmen, und im Text ersetzen. Erst dann das Stylesheet setzen, dann mit korrekten absoluten Pfaden.

Die Alternative ist der resource-compiler von Qt, der wohl auch fuer Python verfuegbar ist laut https://stackoverflow.com/questions/366 ... -pyqt-code

Damit kannst du deine Resourcen in ein Python-File stopfen, und wenn das importiert ist, kannst du danach im Stylesheet mit url(":/pfad/zum/Png.png") arbeiten - das :/ bedeutet, dass das Ding aus dem QRC geladen wurden.

Zu dem anderen Problem kann ich nichts sagen.
Ernie1412
User
Beiträge: 160
Registriert: Freitag 10. Januar 2020, 20:38

Code: Alles auswählen

self.Lese.setStyleSheet('#LeseButton {background-image: url(C:/Users/erni1/Desktop/Python/MeinProgramm/graphics/Scan_Gruen_klein.png);background-color: transparent;}

Code: Alles auswählen

 pfad = os.path.dirname(os.path.abspath(__file__)) 
wie binde ich nun den "pfad" in die url ?
ich habe es mit {} mit +...+ versucht
dann noch mit "..."
nur wenn man den Pfad komplett ausschreibt ladet er die png
was ist wenn das Porgramm aber mal nicht in "C:/Users/erni1/Desktop/Python/MeinProgramm" ist ?
Ernie1412
User
Beiträge: 160
Registriert: Freitag 10. Januar 2020, 20:38

ach ja das mit QRC habe ich ausprobiert
in QT Designer ist alles ok., sobald ich die .py starte kommt das:
Could not create pixmap from :\graphics\Scan_Gruen_klein.png
ich habe irgendwas von compile der *qrc file gelesen, habe ich gemacht. nütze aber nix, gleiche Fehler
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die backslashes sind falsch in der URL. Und hast du den Link gesehen, den ich gepostet habe? Da steht das notwendige kommando drin. Hast du das ausgeführt?

Und wenn du ersetzen willst, hat Python da ja diverse Methoden. ZB String-Formatierung mit dicts.

“{key}”.format(key=11)

Analog kannst du also das Stylesheet formatieren. Allerdings musst du dann { und } escapen. Daher wäre ggf ein anderes Vorgehen einfacher.
Ernie1412
User
Beiträge: 160
Registriert: Freitag 10. Januar 2020, 20:38

Danke dir !
ich habe das import resource nicht gesehen, nun klappt alles super
Antworten