我要在 pyside6 上分离文件。我按照自己的方式划分Widget,分离文件,但是结果不一样。为什么不一样?
import sys
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QHBoxLayout,
QWidget,
QVBoxLayout,
QLabel,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Test")
self.setGeometry(100, 100, 300, 200)
central_widget = QWidget()
widgetsss = QWidget()
title_1 = QLabel("Title 1")
title_2 = QLabel("Title 2")
title_3 = QLabel("Title 3")
layout = QVBoxLayout()
layout.addWidget(title_1)
layout.addWidget(title_2)
layout.addWidget(title_3)
widgetsss.setLayout(layout)
widgetsss.setStyleSheet("background-color:blue;")
layout = QHBoxLayout(central_widget)
layout.addWidget(widgetsss)
self.setCentralWidget(central_widget)
结果是
其他的是
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Test")
self.setGeometry(100, 100, 300, 200)
central_widget = QWidget()
widgetsss = anoterwidget()
widgetsss.setStyleSheet("background-color:lightgreen;")
layout = QHBoxLayout(central_widget)
layout.addWidget(widgetsss)
self.setCentralWidget(central_widget)
class anoterwidget(QWidget):
def __init__(self):
super().__init__()
title_1 = QLabel("Title 1")
title_2 = QLabel("Title 2")
title_3 = QLabel("Title 3")
layout = QVBoxLayout()
layout.addWidget(title_1)
layout.addWidget(title_2)
layout.addWidget(title_3)
self.setLayout(layout)
结果是
为什么会有这样的差异?
这种行为的原因有两个:
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QWidget,
QVBoxLayout,
QLabel,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Single Class")
widgetsss = QWidget()
layout = QVBoxLayout()
title = QLabel()
layout.addWidget(title)
widgetsss.setLayout(layout)
self.setCentralWidget(widgetsss)
title.setText("contentsMargins: " + str(layout.contentsMargins()))
class MainWindow2(QMainWindow):
def __init__(self):
super().__init__()
widgetsss = anoterwidget()
self.setCentralWidget(widgetsss)
class anoterwidget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Double Class")
layout = QVBoxLayout()
title = QLabel()
layout.addWidget(title)
self.setLayout(layout)
title.setText("contentsMargins: " + str(layout.contentsMargins()))
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
# Start the event loop.
app.exec()
app = QApplication.instance()
window = MainWindow2()
window.show()
# Start the event loop.
app.exec()
QLabel { #css_goes_here }
:结合 1) 和 2),您应该得到类似的结果:
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QWidget,
QVBoxLayout,
QLabel,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Single Class")
widg = QWidget(self)
layout = QVBoxLayout()
title_1 = QLabel("Title 1")
title_2 = QLabel("Title 2")
title_3 = QLabel("Title 3")
layout.addWidget(title_1)
layout.addWidget(title_2)
layout.addWidget(title_3)
layout.setContentsMargins(11, 11, 11, 11)
widg.setLayout(layout)
p = widg.palette()
p.setColor(self.backgroundRole(), Qt.red)
widg.setPalette(p)
widg.setStyleSheet(
"""
QLabel {
background-color:pink;
}"""
)
self.setCentralWidget(widg)
class MainWindow2(QMainWindow):
def __init__(self):
super().__init__()
widg = anoterwidget()
widg.setStyleSheet("background-color:lightgreen;")
self.setCentralWidget(widg)
class anoterwidget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Double Class")
layout = QVBoxLayout()
title_1 = QLabel("Title 1")
title_2 = QLabel("Title 2")
title_3 = QLabel("Title 3")
layout.addWidget(title_1)
layout.addWidget(title_2)
layout.addWidget(title_3)
layout.setContentsMargins(11, 11, 11, 11)
self.setLayout(layout)
print("?")
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
# Start the event loop.
app.exec()
app = QApplication.instance()
window = MainWindow2()
window.show()
# Start the event loop.
app.exec()