2017-03-20 50 views
0

私はたくさんの子を含むウィジェットを持っています。私はその背景を透明にしたいが、子は不透明にしておきたい。どうすればpysideのQWidgetで透明な背景を持つことができますか?その子を不透明に保つ

I'am使用PySide 1.2.1 win7の

私はこのような何か試してみる:


self.setAttribute(Qt.WA_TranslucentBackground、真の);


self.setStyleSheet( "背景色:RGBA(40,40,150,150);国境:0PX;")


が、それは私のために働くdosen't。それはウィジェット全体を透明にします。私は子供たちを不透明にしておきたい。誰か助けてくれますか?どうもありがとうございます。ここに私のコード、助けをありがとうございます。


import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 

class M_SCROLL_GRID_WIDGET(QWidget): 
    # This is a common ui class . 
    def __init__(self,column_count): 
     super(M_SCROLL_GRID_WIDGET, self).__init__() 

     self.column_count = column_count 

     self.visible_widget_list = [] 

     self.scroll_widget = QWidget() 

     self.scroll_area = QScrollArea() 
     self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) 
     self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) 
     self.scroll_area.setWidgetResizable(True) 
     self.scroll_area.setWidget(self.scroll_widget) 

     self.main_layout = QGridLayout() 

     self.main_layout.setSpacing(0) 

     self.scroll_widget.setLayout(self.main_layout) 
     self.main_layout.setAlignment(Qt.AlignTop) 
     master_layout = QVBoxLayout(self) 
     master_layout.addWidget(self.scroll_area) 

     self.setLayout(master_layout) 

     self.setAttribute(Qt.WA_TranslucentBackground, True) 
     self.setStyleSheet("background-color:rgba(40,40,150,150);border:0px;") 


    def Get_Widget_Count(self): 
     return len(self.visible_widget_list) 


    def Add_Widget_To_Vis_List(self, widget): 
     self.visible_widget_list.append(widget) 


    def Remove_Widget_To_Vis_List(self, widget): 
     self.visible_widget_list.remove(widget) 


    def Remove_All_Widgets(self): 
     for i in reversed(range(self.main_layout.count())): 
      widget = self.main_layout.itemAt(i).widget() 
      widget.setParent(None) 


    def Clean_Visible_List(self): 
     self.visible_widget_list = [] 


    def Refresh(self): 

     for widget_index in xrange(len(self.visible_widget_list)): 
      r_position = widget_index /self.column_count 
      c_position = (widget_index + 1) % self.column_count 
      if c_position == 0: 
       c_position = self.column_count 
         self.main_layout.addWidget(self.visible_widget_list[widget_index], r_position, c_position) 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 

    caofan = M_SCROLL_GRID_WIDGET(3) 

    btn_list = [] 

    caofan.Remove_All_Widgets() 
    for a in xrange(50): 
     btn = QPushButton(str(a+1)) 
     btn_list.append(btn) 
     caofan.Add_Widget_To_Vis_List(btn) 

    caofan.Refresh() 

    caofan.show() 

    app.exec_() 
+0

あなたの例では、あまりにも多くの混乱が含まれています。必須ではないものはすべて削除できますか?また、透明なウィジェットは表示されません。すべてが青と黒です... – Trilarion

答えて

0

私は、本当の問題は、指定したスタイルシートは、子ウィジェットに伝播していることであると思います。だから、

、...

self.setStyleSheet("background-color:rgba(40,40,150,150);border:0px;") 

と何かのようにQWidget::paintEventを上書きを削除...

def paintEvent(self, event): 
    painter = QPainter(self) 
    painter.fillRect(self.rect(), QColor(40, 40, 150, 150)) 
関連する問題