【问题标题】:PyQt widget border color transparent - but button inside normal borderPyQt 小部件边框颜色透明 - 但按钮在正常边框内
【发布时间】:2021-03-17 16:28:12
【问题描述】:

我希望我的 QTWidgets.QWidget 的边框是透明的或禁用的(borderwidth=0),但是当我通过样式表将其设置为“border:0”时,小部件内的所有按钮也没有边框- 知道如何保持按钮的样式并且只更改小部件边框吗?

class lamp_frame(object):
    def setupUi(self, window):
        window.setObjectName("Yeelight Controlle")
        window.resize(460, 140+self.window_hight)
        window.setFixedSize(460, 140+self.window_hight)
        self.frame_0 = QtWidgets.QFrame(window)
        self.frame_0.setGeometry(QtCore.QRect(20, 30+self.top, 420, 70)) 
        self.frame_0.setStyleSheet("border:0")
        self.frame_0.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_0.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_0.setObjectName("frame_0")

        self.pushButton_0 = QtWidgets.QPushButton(self.frame_0)
        self.pushButton_0.setGeometry(QtCore.QRect(30, 35, 50, 32))
        self.pushButton_0.setObjectName("status")

【问题讨论】:

    标签: python pyqt pyqt5 border qpushbutton


    【解决方案1】:

    根据定义,样式表是级联。来自wikipedia description

    具有最高优先级的样式表控制内容显示。未在最高优先级源中设置的声明将传递给较低优先级的源

    这意味着如果在对象上设置了“通用”属性而没有以任何方式指定“目标”,则每个子对象都将继承该属性。由于按钮是框架的子框架,它们的边框将被框架继承。

    通常的约定是为属性的目标指定一个选择器,以便正确地将这些属性仅应用于选定的对象。

    这意味着使用简单的“边框:0;”将导致不仅在框架上使用该边框,而且对它的所有子项都使用该边框,这就是为什么应该避免使用这种“通用样式表”,即使它们有效。

    Qt 选择器列在syntax documentation 中,在您的情况下,您有两个选择:

    • 为对象class设置样式表:QFrame { border: 0; }
    • 使用对象名称#frame_0 { border: 0; }

    显然,选择器可以根据需要混合使用。更具体地说,由于理论上可以有更多对象具有相同的对象名称(但 Designer 不允许这样做,因为这不是一个好习惯),您可以使用以下内容:QFrame#frame_0 { border: 0; }

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2013-01-13
      • 2016-02-24
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多