展开pyqt中的小部件

时间:2017-10-12 11:35:05

标签: qt pyqt5

我正在尝试强制QTextEdit窗口小部件跨越QGridLayout的整个单元格。 我尝试了QSizePolicysizeHint()的许多不同组合,但没有任何效果。

在下面的示例中,我有一个最小尺寸800x600的主要小部件和另一个小部件'蓝色'第1列中的大小为100x100。所以我希望第0列中的QTextEdit为700x600。

一般来说,我想要'编辑'如果我的主窗口小部件被调整为nxm,则为(n - blue.width())xm。

import sys
from PyQt5 import QtWidgets, QtCore

if __name__ == '__main__':
    qApp = QtWidgets.QApplication(sys.argv)

    mainWidget = QtWidgets.QWidget()
    mainWidget.setMinimumSize(800, 600)
    mainLayout = QtWidgets.QGridLayout(mainWidget)

    blue = QtWidgets.QWidget(mainWidget)
    blue.setStyleSheet('background-color: blue')
    blue.setFixedSize(100, 100)
    edit = QtWidgets.QTextEdit(mainWidget)

    ### what to do here?
    policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
    edit.setSizePolicy(policy)
    ###

    mainLayout.addWidget(edit, 0, 0, 1, 1, QtCore.Qt.AlignCenter)
    mainLayout.addWidget(blue, 0, 1, 1, 1, QtCore.Qt.AlignCenter)
    mainLayout.setColumnStretch(0, 1)
    mainLayout.setColumnStretch(1, 0)

    mainWidget.setLayout(mainLayout)
    mainWidget.show()
    sys.exit(qApp.exec_())

1 个答案:

答案 0 :(得分:0)

我认为你只是在QGridLayout上设置了太多限制。尝试使用...添加小部件到布局

mainLayout.addWidget(edit, 0, 0)
mainLayout.addWidget(blue, 0, 1)

此外,您可能不需要明确设置大小调整策略 - 它应该正常工作 (它适用于我)。

完整的,最小的工作示例将是......

import sys
from PyQt5 import QtWidgets, QtCore

if __name__ == '__main__':
    qApp = QtWidgets.QApplication(sys.argv)

    mainWidget = QtWidgets.QWidget()
    mainWidget.setMinimumSize(800, 600)
    mainLayout = QtWidgets.QGridLayout(mainWidget)

    blue = QtWidgets.QWidget(mainWidget)
    blue.setStyleSheet('background-color: blue')
    blue.setFixedSize(100, 100)
    edit = QtWidgets.QTextEdit(mainWidget)

    mainLayout.addWidget(edit, 0, 0)
    mainLayout.addWidget(blue, 0, 1)

    mainWidget.show()
    sys.exit(qApp.exec_())