为什么QWidget在继承时表现不同
Why QWidget behaves differently when it is inherited
当我使用继承的 QWidget 时,边距和间距没有背景颜色,这与直接使用 QWidget 不同(代码基本相同).
纯 QWidget:
class App(QWidget):
def __init__(self):
super().__init__()
self.start()
def start(self):
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.layout)
self.setGeometry(10, 10, 500, 100)
grid_layout = QGridLayout()
grid_layout.setSpacing(10)
widget = QWidget()
widget.setLayout(grid_layout)
widget.setStyleSheet('background: green')
grid_layout.addWidget(QLabel("first"), 0, 0)
grid_layout.addWidget(QLabel("second"), 0, 1)
grid_layout.addWidget(QLabel("third"), 0, 2)
self.layout.addWidget(widget)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = App()
#ex.start_card_holder()
sys.exit(app.exec_())
继承的QWidget:
class App(QWidget):
....
class MainWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
def start(self):
...
widget = App.MainWidget()
...
谁能告诉我哪里做错了?
必须清楚以下概念才能理解行为:
继承自QWidget的类默认不实现基于Qt QStyleSheet的绘画如下问题:
- Qt Stylesheet for custom widget
- CSS Stylesheet is not applied to custom QWidget
通过设置 "background: green" 表示小部件在启用时采用该颜色及其子项。
在你的情况下 "widget" 如果它是 QWidget
那么它将被涂漆但如果它是 MainWidget
则不会。
要检查我指出的内容,只需使用上述问题的答案之一启用背景颜色:
# ...
widget = App.MainWidget()
widget.setAttribute(Qt.WA_StyledBackground, True)
# ...
当我使用继承的 QWidget 时,边距和间距没有背景颜色,这与直接使用 QWidget 不同(代码基本相同).
纯 QWidget:
class App(QWidget):
def __init__(self):
super().__init__()
self.start()
def start(self):
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.layout)
self.setGeometry(10, 10, 500, 100)
grid_layout = QGridLayout()
grid_layout.setSpacing(10)
widget = QWidget()
widget.setLayout(grid_layout)
widget.setStyleSheet('background: green')
grid_layout.addWidget(QLabel("first"), 0, 0)
grid_layout.addWidget(QLabel("second"), 0, 1)
grid_layout.addWidget(QLabel("third"), 0, 2)
self.layout.addWidget(widget)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = App()
#ex.start_card_holder()
sys.exit(app.exec_())
继承的QWidget:
class App(QWidget):
....
class MainWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
def start(self):
...
widget = App.MainWidget()
...
谁能告诉我哪里做错了?
必须清楚以下概念才能理解行为:
继承自QWidget的类默认不实现基于Qt QStyleSheet的绘画如下问题:
- Qt Stylesheet for custom widget
- CSS Stylesheet is not applied to custom QWidget
通过设置 "background: green" 表示小部件在启用时采用该颜色及其子项。
在你的情况下 "widget" 如果它是 QWidget
那么它将被涂漆但如果它是 MainWidget
则不会。
要检查我指出的内容,只需使用上述问题的答案之一启用背景颜色:
# ...
widget = App.MainWidget()
widget.setAttribute(Qt.WA_StyledBackground, True)
# ...