如何在 PySide2 中添加边框或设置透明 QLayout?

Posted

技术标签:

【中文标题】如何在 PySide2 中添加边框或设置透明 QLayout?【英文标题】:How to add a border or set transparent a QLayout in PySide2? 【发布时间】:2019-12-26 20:03:39 【问题描述】:

我正在为 Blender 做一个插件,我正在使用 PySide2。我能够删除窗口标题并仅显示窗口的内容。我在 QFrame 中插入了一个动画 gif 并更改了它的边框。问题是容器仍然出现尖锐的边界。

有什么方法可以改变 QLayout 的样式吗? 我希望为 QLayout 添加角或将其设置为透明而不是白色。

这是我的代码:

def __init__(self, parent=None):
    super(Ui_Form, self).__init__(parent)
    #size of the container of gif
    self.size = QtCore.QSize(160, 100)
    self.pixel = QtGui.QMovie(
        '/home/mateus/Documents/Blender Projects/blender_pyside2_example-master/gui/img.gif')
    self.pixel.setScaledSize(self.size)
    #size of the window
    self.setFixedSize(160, 100)
    #style of with rounded corners
    self.setStyleSheet("""
    QFrame
        border-style: solid;
        border-color: rgba(55, 55, 55, 255);
        border-width: 3px;
        border-radius: 10px;
        background-color: rgba(55, 55, 55, 255);
    
    """)

    self.label = QtWidgets.QLabel()
    self.label.setMovie(self.pixel)
    self.pixel.start()
    self.label.show()

    layout = QtWidgets.QVBoxLayout()
    layout.setMargin(0)
    #attach gif to layout
    layout.addWidget(self.label)

    self.unsetCursor()

    self.setLayout(layout)

【问题讨论】:

【参考方案1】:

你必须让窗口透明:

self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.setStyleSheet("""
QWidget
    background: transparent;

QFrame
    border-style: solid;
    border-color: rgba(55, 55, 55, 255);
    border-width: 3px;
    border-radius: 30px;
    background-color: rgba(55, 55, 55, 255);

""")

注意:布局不是图形元素,所以不能透明,要透明的是容器。

【讨论】:

谢谢@eylllanesc。这真的奏效了!干净整洁。

以上是关于如何在 PySide2 中添加边框或设置透明 QLayout?的主要内容,如果未能解决你的问题,请参考以下文章

在左侧的表单边框上添加复选框或控件以最小化按钮

SwiftUI 设置边框、透明度、阴影

透明图标如何去掉边框

如何使用命令行工具向图像添加透明的 OS X 样式边框?

WPF 透明窗体,无边框(比如一些桌面的日历桌面程序),如何让程序钉在桌面上。直接镶嵌在桌面背景上?

是否可以在 PyQt/PySide2 中为 QLineEdit 的文本制作“破碎”边框