2017-10-12 101 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