Cela a une solution très facile dans PyQt5. Tout ce que vous devez faire est set the size adjust policy sur la table lors de l'initialisation de l'interface utilisateur, et il sera automatiquement redimensionner pour s'adapter au contenu. Cela peut être fait dans Qt Designer, ou par programme, comme celui-ci:
self.statTable.setSizeAdjustPolicy(
QtWidgets.QAbstractScrollArea.AdjustToContents)
Vous suffit alors de faire:
self.statTable.resizeColumnsToContents()
chaque fois que la table est repeuplée.
Pour PyQt4, tout doit être calculé manuellement, et quelques hacks sont également nécessaires pour obtenir des résultats complètement cohérents. Le script de démonstration ci-dessous fonctionne bien pour moi, mais YMMV:
import random
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.table = QtGui.QTableWidget(5, 2, self)
self.button = QtGui.QPushButton('Populate', self)
self.button.clicked.connect(self.populate)
layout = QtGui.QGridLayout(self)
layout.addWidget(self.table, 0, 0)
layout.addWidget(self.button, 1, 0)
layout.setColumnStretch(1, 1)
def populate(self):
words = 'Red Green Blue Yellow Black White Purple'.split()
length = random.randint(2, len(words))
self.table.setRowCount(random.randint(3, 30))
for column in range(self.table.columnCount()):
for row in range(self.table.rowCount()):
item = QtGui.QTableWidgetItem(' '.join(
random.sample(words, random.randint(1, length))))
self.table.setItem(row, column, item)
self.table.setVisible(False)
self.table.verticalScrollBar().setValue(0)
self.table.resizeColumnsToContents()
self.table.setVisible(True)
self.setTableWidth()
def setTableWidth(self):
width = self.table.verticalHeader().width()
width += self.table.horizontalHeader().length()
if self.table.verticalScrollBar().isVisible():
width += self.table.verticalScrollBar().width()
width += self.table.frameWidth() * 2
self.table.setFixedWidth(width)
def resizeEvent(self, event):
self.setTableWidth()
super(Window, self).resizeEvent(event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(700, 150, 800, 400)
window.show()
sys.exit(app.exec_())
Avez-vous déjà essayé la solution (s) que j'ai donné dans ma réponse? Je serais intéressé de savoir s'ils ont résolu votre problème (c'était assez difficile à faire, et je ne suis pas sûr que j'ai couvert tous les cas de coin). – ekhumoro
Salut, désolé de ne plus répondre .. En fait, j'ai résolu en ajoutant cette ligne après les deux lignes ci-dessus: '' self.statTable.setFixedWidth (self.statTable.columnWidth (0) + self.statTable.columnWidth (1)) '' – matteo