-1

为什么 sizePolicy 不会影响不在布局中的小部件?

这是一个例子:

from PyQt5 import QtWidgets

app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
window.setGeometry(50, 50, 500, 300)

test_widget = QtWidgets.QWidget(window)
test_widget.setMinimumSize(100, 100)
test_widget.setStyleSheet("background-color:red")
size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
test_widget.setSizePolicy(size_policy)


window.show()
app.exec()

但这不起作用,如果您更改了主窗口大小,红色框仍然具有相同的大小。

那么,当父(主窗口)发生变化时,我怎样才能使那个红色框可调整大小。

注意:出于某种原因,我不想使用布局。

4

1 回答 1

1

我不确定我是否完全理解您的 GUI 设计,但您应该注意,a 中的单个单元格(由行/列对定义)QGridLayout可以被多个小部件占用。一个(非常)简单的例子证明了这一点......

#!/usr/local/bin/python3
import os
import sys

from PySide2.QtWidgets import QApplication, QGridLayout, QLabel, QPushButton, QWidget
from PySide2.QtCore import Qt

class widget(QWidget):
    def __init__ (self, parent = None):
        super(widget, self).__init__(parent)
        gl = QGridLayout(self)
        pb = QPushButton("Show/Hide Menu")
        self.menu = QLabel("Menu goes here...")
        self.menu.setAlignment(Qt.AlignCenter)
        self.menu.setStyleSheet("background-color: #40800000;")
        canvas = QLabel("Canvas")
        canvas.setAlignment(Qt.AlignCenter)
        canvas.setStyleSheet("background-color: #40000080;")
        gl.addWidget(pb, 0, 0)
        gl.addWidget(canvas, 0, 0, 2, 2)
        pb.raise_()
        pb.clicked.connect(self.toggle_menu)
        gl.addWidget(self.menu, 1, 0)
        self.menu.hide()
    def toggle_menu (self, checked):
        self.menu.setVisible(not self.menu.isVisible())

if __name__ == '__main__':
    app = QApplication([])
    w = widget()
    w.show()
    app.exec_()

【我用过PySide2,没有PyQt5安装。】

因此,如果我理解正确,那么我不明白为什么您不能使用QGridLayout. 可以为您节省大量工作。

于 2022-01-25T16:01:19.330 回答