2016-05-30 11 views
1

Ich habe ein Problem, ein Problem für mein Programm zu lösen. Wenn ich ein transparentes Widget erstelle, das einige andere Widgets enthält, werden sie auch transparent und ich verstehe nicht warum.transparente Widgets in transparentem Rahmen pyqt5

from PyQt5 import QtWidgets 
from PyQt5.QtCore import Qt 

class MainFrame(QtWidgets.QWidget): 

    def __init__(self, parent=None): 
     super(MainFrame, self).__init__(parent) 

     self.setWindowFlags(Qt.FramelessWindowHint) 
     self.setFixedSize(860, 560) 

     # Set the opacity 
     self.setWindowOpacity(1 - 50/100) 

     layout = QtWidgets.QHBoxLayout(self) 

     layout.addWidget(QtWidgets.QPushButton("TEST")) 

In diesem Beispielcode wird das Widget QPushButton transparent erscheinen, es ist das gleiche mit Etiketten ist, und andere Widgets. Wie kann ich NUR für meine Klasse MainFrame Transparenz anwenden?

Edit:

hier ist, was ich habe (transparente Schaltfläche und transparent QWidget): enter image description here hier ist das, was ich brauche (keine transparente Schaltfläche und transparent QWidget): enter image description here Thank you very much.

Antwort

2

Ich glaube, Sie sind für diese Suche:

self.setAttribute(Qt.WA_TranslucentBackground) 

Der vollständige Code aus Ihrem Beispiel angepasst ist dies:

import sys 
from PyQt5 import QtWidgets 
from PyQt5.QtCore import Qt 

class MainFrame(QtWidgets.QWidget): 

    def __init__(self, parent=None): 
     super(MainFrame, self).__init__(parent) 

     self.setWindowFlags(Qt.FramelessWindowHint) 
     self.setFixedSize(860, 560) 

     # Set the opacity 
     #self.setWindowOpacity(1 - 50/100) 

     layout = QtWidgets.QHBoxLayout(self) 

     layout.addWidget(QtWidgets.QPushButton("TEST")) 

     self.setAttribute(Qt.WA_TranslucentBackground) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    Frame = MainFrame(None) 
    Frame.show() 
    app.exec_() 

, und das Ergebnis ist folgendes:

transparent QWidget

Wenn Sie nur etwas Transparenz haben möchten, müssen Sie möglicherweise schreiben Sie die paintEvent wie in this example.

+0

Hallo, danke, aber das ist nicht genau das, was ich brauche, ich brauche immer noch das transparente Widget (nicht ganz transparent). Ich habe meine Frage bearbeitet. – SyedElec

+0

@Darkos Wie ich am Ende meiner Antwort gesagt habe: Wenn Sie partielle Transparenz benötigen, müssen Sie das paintEvent erneut implementieren. Die Art, wie Sie es tun müssen, ist in der Verbindung am unteren Rand. – armatita

+0

Sie haben vollkommen Recht! Ich habe es nicht versucht, vielen Dank. – SyedElec