根据http://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum,设置widget的大小策略有以下效果:
sizeHint() 是一个合理的大小,但是小部件可以缩小并 还是有用的。小部件可以利用额外的空间,所以它应该 获得尽可能多的空间(例如水平方向 水平滑块)。
所以,我希望下面的黄色小部件填充绿色小部件,但这并没有发生。我做错了什么?
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Yellow(QWidget):
def __init__(self, *args):
super().__init__(*args)
# Set palette
bg = QPalette()
bg.setColor(QPalette.Window, Qt.yellow)
self.setAutoFillBackground(True)
self.setPalette(bg)
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
class Green(QWidget):
def __init__(self, *args):
super().__init__(*args)
# Set palette
bg = QPalette()
bg.setColor(QPalette.Window, Qt.green)
self.setAutoFillBackground(True)
self.setPalette(bg)
self.yellow = Yellow(self)
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'PyQt5'
self.left = 10
self.top = 10
self.width = 200
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.green = Green(self)
self.green.resize(184, 154)
self.green.move(10, 10)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
使用布局:
class Green(QWidget):
def __init__(self, *args):
super().__init__(*args)
# Set palette
bg = QPalette()
bg.setColor(QPalette.Window, Qt.green)
self.setAutoFillBackground(True)
self.setPalette(bg)
self.yellow = Yellow(self)
self.myLayout = QGridLayout()
self.myLayout.addWidget(self.yellow)
self.setLayout(self.myLayout)
结果:
如果添加
self.myLayout.setContentsMargins(0,0,0,0)
,黄色小部件完全覆盖绿色小部件:
对于任何寻找如何使用的人
setSizePolicy
:
导入QSizePolicy:
from PyQt6.QtWidgets import QSizePolicy
语法:
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)