为什么结果不同?

问题描述 投票:0回答:1

我要在 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)

结果是

enter image description here

其他的是

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)

结果是

enter image description here

为什么会有这样的差异?

python qwidget pyside6
1个回答
0
投票

这种行为的原因有两个:

  1. PyQt 为两个变体选择不同的边距(出于我未知的原因):

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()
  1. 通过设置样式表更改颜色可能会产生不良的副作用。为了更好地控制这一点,请始终提及您要修改的哪个组件,例如
    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()
© www.soinside.com 2019 - 2024. All rights reserved.