我正在使用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)设置为...
Qt除非必要,否则不会更新几何图形,也不会强迫他这样做,并且出于效率考虑,它会这样做。因此,如果未调用setVisible(True)
或等效方法,则几何形状将不会更改。