2016-12-06 4 views
2

Ich habe gegoogelt, aber ich kann keine Lösung für mein Problem finden.Größe der Spaltenbreite anpassen, um in das QTableWidget pyqt zu passen

Ich habe ein QTableWidget mit 2 Spalten und was ich versuche, ist, sie für das gesamte Widget sichtbar zu machen, ohne dass die horizontale Bildlaufleiste erscheint.

Mit einem Bild sollte es klar sein:

enter image description here

I Qt Designer verwendet haben, die Benutzeroberfläche und einige Code zu erstellen, die alle Widgets und andere Sachen zu füllen.

Also, zuerst die Größe verändert I th2 2 Spalten auf den Inhalt mit:

self.statTable.resizeColumnToContents(0) 
self.statTable.resizeColumnToContents(1) 

und es funktioniert, aber dann wird das Widget Ändern der Größe nicht auf die 2 Spalten Breite.

+0

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

+0

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

Antwort

6

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

Ich benutze pyQt5 also wo kann ich das auf QT Designer finden? weil ich es nirgends sehe und der Code nicht funktioniert hat! @Ekhumoro –

+2

@MohammedAminAIMEUR. Es befindet sich im Eigenschaften-Editor (Abschnitt 'QAbstractScrollArea'). – ekhumoro

Verwandte Themen