Python 带有 SizePolicy 的小部件
Python Widget with SizePolicy
为什么 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()
但这不起作用,如果您更改主要 window 尺寸,红色框仍然具有相同尺寸。
那么,当父项(主 window)发生变化时,我怎样才能使那个红色框调整大小。
注意:出于某种原因我不想使用布局。
我不确定我是否完全理解您的 GUI 设计,但您应该注意 QGridLayout
中的单个单元格(由 row/column 对定义)可以被多个单个小部件。一个(非常)简单的例子证明了这一点......
#!/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
。可以为您省去很多工作。
为什么 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()
但这不起作用,如果您更改主要 window 尺寸,红色框仍然具有相同尺寸。
那么,当父项(主 window)发生变化时,我怎样才能使那个红色框调整大小。
注意:出于某种原因我不想使用布局。
我不确定我是否完全理解您的 GUI 设计,但您应该注意 QGridLayout
中的单个单元格(由 row/column 对定义)可以被多个单个小部件。一个(非常)简单的例子证明了这一点......
#!/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
。可以为您省去很多工作。