QWidget在布局分配中不可见

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

我正在使用QGridLayout放置窗口元素来创建自定义窗口:例如标题栏,大小手柄等。>

当我为窗口小部件设置any

布局时,它不会一开始就显示出来。如果设置.setVisible(True),效果很好。

所以问题是:为什么会发生,为什么小部件在布局分配时不可见?这是某种错误还是在构想?

小部件文件为:

from PySide2 import QtWidgets, QtGui, QtCore


class QCustomWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.background_color = QtGui.QColor(23, 23, 34)

        self._initUI()

    def _initUI(self):
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)

        print(self.isVisible())
        #self.setVisible(True)

        # Is visible without layout
        self.setLayout(QtWidgets.QGridLayout())

        self.layout().setMargin(0)
        self.layout().setSpacing(0)
        # ---------------------------------------

    def showEvent(self, event: QtGui.QShowEvent):
        self.centerOnScreen()

    def paintEvent(self, event: QtGui.QPaintEvent):
        painter = QtGui.QPainter(self)

        painter.setBrush(self.background_color)
        painter.setPen(QtCore.Qt.NoPen)

        painter.drawRect(0, 0, self.width(), self.height())

    def centerOnScreen(self):
        screen = QtWidgets.QDesktopWidget()
        screen_geometry = screen.screenGeometry(self)

        screen_center_x = screen_geometry.center().x()
        screen_center_y = screen_geometry.center().y()

        self.move(screen_center_x - self.width() // 2,
                  screen_center_y - self.height() // 2)

应用程序文件为:

from PySide2 import QtWidgets
from QCustomWindow import QCustomWindow
import sys


app = QtWidgets.QApplication(sys.argv)

window = QCustomWindow()
window.show()

sys.exit(app.exec_())

我正在使用QGridLayout制作自定义窗口来放置窗口元素:如标题栏,大小手柄等。当我为小部件设置任何布局时,它不会在一开始就显示。如果我将.setVisible(True)设置为...

python pyside2
1个回答
1
投票

Qt除非必要,否则不会更新几何图形,也不会强迫他这样做,并且出于效率考虑,它会这样做。因此,如果未调用setVisible(True)或等效方法,则几何形状将不会更改。

© www.soinside.com 2019 - 2024. All rights reserved.