PySide - PyQt : Comment faire ensemble QTableWidget la largeur de la colonne en tant que proportion de l'espace disponible?
Je suis le développement d'une application informatique avec PySide et je suis en utilisant le QTableWidget. Disons que mon tableau a 3 colonnes, mais les données qu'ils contiennent est très différent, comme (pour chaque ligne) une longue phrase dans la première colonne, puis 3 chiffres dans les deux dernières colonnes. J'aimerais avoir ma table redimensionner afin de l'ajuster à sa taille pour les données, ou au moins être en mesure pour définir les tailles de colonne que (dire) 70/15/15 % de l'espace disponible.
Quelle est la meilleure façon de le faire ?
J'ai essayé table.horizontalHeader().setResizeMode(QHeaderView.Stretch)
après la lecture de cette question mais il fait 3 colonnes de la même taille.
J'ai aussi essayé de table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
grâce à Fabio's commentaire mais il ne remplit pas tout l'espace disponible au besoin.
Ni Interactive
, Fixed
, Stretch
, ResizeToContents
de la QHeaderView documentation semblent me donner ce dont j'ai besoin (voir la deuxième édition).
Toute aide serait appréciée, même si c'est pour Qt/C++ ! Je vous remercie beaucoup.
EDIT : j'ai trouvé une sorte de solution de contournement, mais c'est toujours pas ce que je suis à la recherche de :
header = table.horizontalHeader()
header.setResizeMode(QHeaderView.ResizeToContents)
header.setStretchLastSection(True)
Il serait mieux si il existait un setStretchFirstSection
méthode, mais malheureusement, il ne semble pas en être un.
EDIT 2 :
La seule chose qui peut être modifié dans le tableau est la dernière colonne, l'utilisateur peut entrer un nombre à la. Les flèches rouges indiquent ce que j'aimerais avoir.
Voici ce qui se passe avec Stretch
Voici ce qui se passe avec ResizeToContents
- Essayez QHeaderView.ResizeToContents au lieu de QHeaderView.Stretch
- Cela fonctionne, mais ce n'est pas tout à fait ce que je cherche, car avec
ResizeToContents
, comme mes colonnes ne sont pas assez grands, ils ne remplissent pas l'espace disponible. Je vais modifier de sorte qu'il devient plus clair. - Pour votre 2ème édition, je crois que la bonne chose à faire est de définir la colonne avec une valeur par défaut de la largeur de votre estimation approximative, puisqu'il peut être étiré les utilisateurs peuvent modifier plus tard comme ils le souhaitent.
Vous devez vous connecter pour publier un commentaire.
Cela peut être résolu par la fixation de l'image-mode pour chaque colonne. La première section doit s'étirer pour prendre l'espace disponible, tandis que les deux dernières sections, il suffit de les redimensionner à leur contenu:
PyQt4:
PyQt5:
QHeaderView
pour chaque colonne. Cela fonctionne bien, mais j'ai changé pourFixed
pour les deux dernières colonnes, puis ajout d'une largeur minimale avecself.table.setColumnWidth(index, width)
(convient le mieux mon cas)PyQt4
PyQt5
Vous pouvez faire cela avec
QItemDelegates
ouQStyledItemDelegates
. Si vous souhaitez redimensionner à la table des matières et automatique étirement, vous aurez besoin de choisir la colonne qui est le "stretch" de la colonne.Vous pouvez définir le mode de redimensionnement de
ResizeToContents
, ou si vous souhaitez que l'utilisateur puisse ajuster la largeur de la colonne en tant que de besoin, il suffit d'appelerresizeColumnsToContents
manuellement après avoir fait des changements à la table des éléments.Vous aurez également besoin de fudge avec les calculs de largeur un peu en raison de marges et de l'espacement entre les colonnes (comme ajouter un pixel ou deux à la
calculated_width
pour chaque colonne pour tenir compte de la cellule de la frontière).Comme mentionné précédemment, vous pouvez le faire en mettant le redimensionnement en mode de chaque colonne. Toutefois, si vous avez beaucoup de colonnes, cela peut être beaucoup de code. La façon dont je le fais, c'est le "général" redimensionner mode "ResizeToContent" et que pour un (ou plusieurs) des colonnes pour "Étirer"!
Voici le code:
PyQt4:
PyQt5: