-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 設計を完全に理解しているかどうかはわかりませんが、(行/列のペアで定義された) の 1 つのセル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_()

PySide2PyQt5装着のまま使用しました。】

したがって、私正しく理解していれば、なぜ a を使用できないのかわかりませんQGridLayout。多くの手間を省くことができます。

于 2022-01-25T16:01:19.330 に答える