首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setSizePolicy()和QSizePolicy.Expanding不工作:子扩展到父级的大小

setSizePolicy()和QSizePolicy.Expanding不工作:子扩展到父级的大小
EN

Stack Overflow用户
提问于 2019-01-20 12:51:27
回答 1查看 10.2K关注 0票数 3

根据http://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum,设置小部件的大小策略具有以下效果:

sizeHint()是一个合理的大小,但是小部件可以缩小,而且仍然很有用。小部件可以使用额外的空间,因此应该尽可能多地获得空间(例如水平滑块的水平方向)。

因此,我希望下面的黄色小部件能够填充Green小部件,但这不会发生。我做错什么了?

代码语言:javascript
复制
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_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 12:57:09

使用布局:

代码语言:javascript
复制
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),黄色小部件将完全覆盖绿色小部件:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54276638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档