2016-04-20 14 views
0

Ich habe ein Problem mit der Einstellung border-image Eigenschaft eines QToolButton (später auch von einem QPushButton, aber ich nehme an, das Problem wird auch dort auftreten). Jede meiner benutzerdefinierten Schaltflächen (die von QToolButton bzw. QPushButton stammen) muss 3 Zustände haben - inaktiv, running und error.QStyleSheet - Einstellung Rand-Bild für Button setzt auch Hintergrundbild für seine Tooltip

Inaktiv:

style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: none;' 

Running:

style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(89, 205, 139);' 

Fehler:

style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(215, 56, 56);' 

wo self.cornerRadius ist eine Zahl, die verwendet wird, um die Rundheit meiner Schaltflächen in Pixeln zu bestimmen, und self.icon ist ein Symbol, das ich irgendwo abgerufen habe.

Alles, was ich meine Taste Konstruktor tue in (unter anderem einfachen Initialisierungen) ist

self.setStyleSheet(style) 

Das clicked() Signal der Taste zu einem Schlitz in der gleichen Klasse verbunden ist, in dem der Staat (zusammen mit dem Stil geändert wird Verwendung von self.setStyleSheet(...)) in Bezug auf den neuen Zustand des Systems ist.

Aus unbekannten Gründen meine Tooltip die Stiländerungen der Taste „gehört“ er erhält:

enter image description here

Ich habe doppelt überprüft die Qt documentation und ich sehe keinen Grund, die dieses Verhalten erklären . Ich möchte den Tooltip-Stil NICHT ändern. Irgendwelche Ideen, wie das zu beheben ist?

Antwort

1

Ich interpretiere die Frage:

How to avoid overlapping the style intended for one widget type with another?

Geist, die:

  • Das Stylesheet von Eltern auf das Kind-Widgets propagiert wird.
  • Das Stylesheet hat Sichtbarkeit, die Sie explizit für den Typ festlegen können.


    myObj.setStyleSheet("QPushButton {border: 0.05em solid lightgray;}")

umschließen einfach das Sheet mit dem Typ z.B. QType { ... }.

Ich behandle nur mit C++ Qt, aber denke, dass PyQt dasselbe Stylesheet-System verwendet.

+1

* facepalm * Ich habe die Eltern-Kind-Propagierung für Stylesheets komplett vergessen. Danke, dass Sie darauf hingewiesen haben und auch, um die Antwort auf den allgemeinen Fall zu erweitern. PS: Es ist das gleiche für Qt C++, wenn in PyQt in Bezug auf Stylesheet getan. – rbaleksandar