2017-10-12 3 views
0

J'essaye de forcer mon widget QTextEdit pour couvrir la cellule entière du QGridLayout. J'ai essayé beaucoup de différentes combinaisons de QSizePolicy et sizeHint(), mais rien n'a l'effet désiré. Dans l'exemple ci-dessous, j'ai un widget principal de taille minimum 800x600 et un autre widget 'blue' de taille 100x100 dans la colonne 1. Donc je veux que le QTextEdit dans la colonne 0 soit 700x600.développez Widget dans pyqt

En général, je veux que 'edit' soit (n- blue.width()) xm si mon widget principal est redimensionné en nxm.

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

Répondre

0

Je pense que vous êtes juste de placer trop de contraintes sur la QGridLayout. Essayez d'ajouter les widgets à la mise en page avec juste ...

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

En outre, vous n'avez probablement pas besoin de définir la politique de dimensionnement explicitement - il devrait simplement travailler tel quel (il le fait pour moi) .

L'exemple complet, le travail minimum serait quelque chose comme ...

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

Merci, est-il une raison? Ma compréhension est que l'alignement et la politique de taille sont indépendants? dans cet exemple, l'alignement est bien entendu inutile. – Jonas