Dies hat eine sehr einfache Lösung in PyQt5. Alles, was Sie tun müssen, ist set the size adjust policy in der Tabelle bei der Initialisierung der Benutzeroberfläche, und es wird automatisch die Größe an den Inhalt anpassen. Dies kann entweder in Qt Designer erfolgen oder programmatisch, wie folgt aus:
self.statTable.setSizeAdjustPolicy(
QtWidgets.QAbstractScrollArea.AdjustToContents)
Sie brauchen dann nur noch zu tun:
self.statTable.resizeColumnsToContents()
, wenn der Tisch wieder aufgefüllt.
Für PyQt4 muss alles manuell berechnet werden, und einige Hacks sind auch erforderlich, um vollständig konsistente Ergebnisse zu erhalten. Der Demo-Skript funktioniert unten in Ordnung für mich, aber 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_())
Haben Sie jemals die Lösung versuchen (n) ich in meiner Antwort gab? Es würde mich interessieren zu wissen, ob sie Ihr Problem gelöst haben (es war ziemlich schwierig zu trainieren und ich bin mir nicht sicher, ob ich alle Eckfälle abgedeckt habe). – ekhumoro
Hallo, Entschuldigung dafür, dass ich nicht mehr geantwortet habe. By the way, ich löste diese Zeile nach den zwei obigen Zeilen: '' self.statTable.setFixedWidth (self.statTable.columnWidth (0) + self.statTable.columnWidth (1)) '' – matteo