gpt4 book ai didi

python - 我怎样才能在 pyside QWidget 中有一个透明的背景,但保持它的 child 不透明

转载 作者:行者123 更新时间:2023-11-28 04:07:01 24 4
gpt4 key购买 nike

我有一个包含很多子项的小部件,我想将其背景设置为透明,但让其子项不透明。

我正在使用 PySide 1.2.1 win7

我尝试过这样的事情:


self.setAttribute(Qt.WA_TranslucentBackground,True);


self.setStyleSheet("背景色:rgba(40,40,150,150);边框:0px;")


但它对我不起作用。它使整个小部件透明。我想让 children 不透明。有人能帮我吗 ?太感谢了。这是我的代码,感谢您的帮助。


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

最佳答案

我怀疑真正的问题是您指定的样式表正在传播到子部件。

所以,删除...

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

关于python - 我怎样才能在 pyside QWidget 中有一个透明的背景,但保持它的 child 不透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com