2016-05-30 11 views
1

私のプログラムの問題を解決するのに問題があります。他のウィジェットを保持する透明なウィジェットを作成すると、透明になり、その理由を理解できません。透明な枠内の透明なウィジェット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")) 

このサンプルコードでは、ウィジェットQPushButtonは透明で表示され、ラベルや他のウィジェットと同じです。私のクラスのMainFrameにのみ透過性を適用するにはどうすればいいですか?

編集:ここ

は私が(透明ボタンと透明QWidgetの)持っているものです。 enter image description here ここでは、私は(NO透明ボタンと透明QWidgetの)必要ないものです: enter image description here はどうもありがとうございました。

答えて

2

私はあなたがこれを見ていると信じて:

self.setAttribute(Qt.WA_TranslucentBackground) 

あなたの例から適応完全なコードはこれです:

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_() 

、その結果がこれです:

transparent QWidget

透明度が必要な場合は、 this exampleのようにpaintEventを書き換えます。

+0

こんにちは、ありがとうが、これは私が必要とするものではありません、私はまだ完全に透明ではない透明なウィジェットが必要です。私は私の質問を編集しました。 – SyedElec

+0

@Darkos答えの最後に言ったように、paintEventEventを再実装する必要があるよりも部分的な透過性が必要な場合。あなたがそれをしなければならない方法は、一番下のリンクにあります。 – armatita

+0

あなたは完全に正しいです!私は試していない、非常にありがとう。 – SyedElec