2017-10-12 94 views
0

我试图强制我的QTextEdit Widget跨越QGridLayout的整个单元格。 我尝试了很多QSizePolicysizeHint()的不同组合,但没有任何效果。在pyqt中展开Widget

在下面的示例中,我有一个最小尺寸为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_()) 

回答

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_()) 
+0

谢谢你,有一个原因?我的理解是,协调和规模政策是独立的?在这个例子中,对齐当然是不必要的。 – Jonas