PySide - PyQt und : Wie setzen QTableWidget Spaltenbreite als Anteil an den verfügbaren Platz?
Entwickle ich ein computer-Anwendung, mit PySide und ich bin mit der QTableWidget. Lassen Sie uns sagen, meine Tabelle hat 3 Spalten, aber die Daten, die Sie enthalten, ist sehr unterschiedlich, wie (für jede Zeile) einen langen Satz in der ersten Spalte, dann die 3-stellige zahlen in den beiden letzten Spalten. Ich möchte meine Tisch-Größe ändern, um seine Größe anpassen, um die Daten, oder zumindest in der Lage sein um die Spalte Größen als (sagen wir) 70/15/15 % des verfügbaren Speicherplatzes.
Was ist der beste Weg, dies zu tun ?
Ich habe versucht table.horizontalHeader().setResizeMode(QHeaderView.Stretch)
nach der Lektüre diese Frage, aber es macht den 3 Spalten der gleichen Größe.
Ich habe auch versucht table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
Dank Fabio's Kommentar aber es füllt nicht den gesamten verfügbaren Speicherplatz als nötig.
Weder Interactive
, Fixed
, Stretch
, ResizeToContents
von der QHeaderView Dokumentation scheinen, um mir zu geben was ich brauche (siehe zweiten edit).
Jede Hilfe würde geschätzt werden, auch wenn es für Qt/C++ ! Ich danke Ihnen sehr.
EDIT : fand ich eine Art workaround, aber es ist noch nicht das, was ich Suche :
header = table.horizontalHeader()
header.setResizeMode(QHeaderView.ResizeToContents)
header.setStretchLastSection(True)
Wäre es besser, wenn gab es eine setStretchFirstSection
Methode, aber leider scheint es nicht zu sein.
EDIT 2 :
Die einzige Sache, die geändert werden können in der Tabelle ist die Letzte Spalte, kann der Benutzer eine Zahl eingeben. Rote Pfeile zeigt an, was möchte ich haben.
Hier ist, was passiert mit Stretch
Hier ist, was passiert mit ResizeToContents
Das funktioniert, aber es ist nicht ganz das, was ich Suche, denn mit
ResizeToContents
, als meine Spalten nicht groß genug sind, Sie nicht füllen den Platz zur Verfügung. Werde ich Bearbeiten, so wird es klar.InformationsquelleAutor AdrienW | 2016-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies kann gelöst werden, indem die Größe ändern-Modus für jede Spalte. Der erste Abschnitt muss sich Strecken, um den verfügbaren Platz, während die beiden letzten Abschnitte nur die Größe ändern, um Ihre Inhalte:
PyQt4:
PyQt5:
QHeaderView
für jede Spalte. Dies funktioniert gut, obwohl ich es geändertFixed
für die letzten beiden Spalten und dann Hinzugefügt eine minimale Breite mitself.table.setColumnWidth(index, width)
(passt besser zu meinem Fall)In qt5 mit dieser Funktion wird geändert, um die setSectionResizeMode()
InformationsquelleAutor ekhumoro
PyQt4
PyQt5
InformationsquelleAutor Xavi Martínez
Können Sie dies mit
QItemDelegates
oderQStyledItemDelegates
. Wenn Sie möchten, um die Größe zu Inhalt und automatische dehnen, müssen Sie die Spalte angeben, ist der "stretch" - Spalte.Können Sie die resize-Modus zu
ResizeToContents
oder wenn Sie möchten, dass der Benutzer in der Lage sein, um die Spaltenbreite nach Bedarf, einfach anrufenresizeColumnsToContents
manuell nach änderungen an der Tabelle Artikel.Können Sie auch brauchen, um fudge, um mit der Breite Berechnungen ein bisschen, weil der Ränder und der Abstand zwischen den Spalten (wie hinzufügen von ein oder zwei pixel, die
calculated_width
für jede Spalte zu berücksichtigen, für die Zelle Grenze).InformationsquelleAutor Brendan Abel
Wie bereits erwähnt, können Sie tun dies, indem Sie die Größe ändern-Modus der jeweiligen Spalte. Allerdings, wenn Sie haben eine Menge von Spalten, kann dies eine Menge code. Die Art und Weise, die ich tun, es ist die Einstellung der "Allgemeinen" resize-Modus "ResizeToContent" und als für einen (oder mehrere) Spalten zu "Strecken"!
Hier ist der code:
PyQt4:
PyQt5:
InformationsquelleAutor koxx