Spaltenbreite in Tabelle festlegen
Verfasst: Montag 10. Dezember 2018, 14:43
Hallo zusammen,
bin Anfänger bei pyqt und beschäftige mich seit ein paar Tagen damit.
Ich möchte eine Tabelle mit Inhalt befüllen, eine feste Column-Breite pro Column vorgeben und eine flexible Zeilenhöhe.
Hier habe ich mal den Code, mit dem ich mich beschäftige:
Bei der Festlegung der einzelnen Column-Breite, habe ich schon gegoogelt und manches ausprobiert, leider aber ohne den gewünschten Erfolg.
Vielleicht könnt Ihr mir dabei helfen, aufzuzeigen was grundsätzlich falsch ist und mich in die richtige Richtung bringen.
Grüße Nobuddy
bin Anfänger bei pyqt und beschäftige mich seit ein paar Tagen damit.
Ich möchte eine Tabelle mit Inhalt befüllen, eine feste Column-Breite pro Column vorgeben und eine flexible Zeilenhöhe.
Hier habe ich mal den Code, mit dem ich mich beschäftige:
Code: Alles auswählen
class MyTableWidget(QtGui.QTableWidget):
def __init__(self, x, y, parent = None):
super(MyTableWidget, self).__init__(x, y, parent)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
# To force the width to use sizeHint().width()
self.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
# To readjust the size automatically...
# ... when columns are added or resized
self.horizontalHeader().geometriesChanged.connect(self.updateGeometryAsync)
self.horizontalHeader().sectionResized.connect(self.updateGeometryAsync)
# ... when a row header label changes and makes the
# width of the vertical header change too
self.model().headerDataChanged.connect(self.updateGeometryAsync)
def updateGeometryAsync(self):
QtCore.QTimer.singleShot(0, self.updateGeometry)
def sizeHint(self):
height = QtGui.QTableWidget.sizeHint(self).height()
height += self.horizontalScrollBar().height()
# length() includes the width of all its sections
width = self.horizontalHeader().length()
# you add the actual size of the vertical header and scrollbar
# (not the sizeHint which would only be the preferred size)
width += self.verticalHeader().width()
width += self.verticalScrollBar().width()
# and the margins which include the frameWidth and the extra
# margins that would be set via a stylesheet or something else
margins = self.contentsMargins()
width += margins.left() + margins.right()
return QtCore.QSize(width, height)
if __name__ == "__main__":
import sys
LABEL = ['Position', 'Lieferant', 'Artikelnummer', 'Benennung', 'Hersteller', 'Herstellermummer', 'VE', 'Inhalt']
_LIST_ = [
['001', 'Meyer', '47110', 'Bratwurst weiss, 125 g / Stück, 50% Schweinefleisch, 50% Rindfleisch', 'Müller', '0012347110', 'Pack', '100'],
['002', 'Meyer', '47120', 'Bratwurst weiss, 175 g / Stück, 50% Schweinefleisch, 50% Rindfleisch', 'Müller', '0012347120', 'Pack', '100'],
['003', 'Meyer', '47121', 'Bratwurst weiss, 175 g / Stück, 50% Schweinefleisch, 50% Rindfleisch, Palettenware 100000 Stück, verpackt zu 100 Stück / Pack, vakuumverpackt', 'Müller', '0012347121', 'Palette', '100000'],
]
width2columns = [10, 15, 20, 40, 15, 20, 10, 10]
app = QtGui.QApplication(sys.argv)
#app.setApplicationName('MyWindow')
view = MyTableWidget(0, 0) # rows, columns
view.setRowCount(len(_LIST_))
view.setColumnCount(len(_LIST_[0]))
view.setHorizontalHeaderLabels(LABEL)
header = view.horizontalHeader()
for i, name in enumerate(LABEL):
header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(i, QtGui.QHeaderView.Stretch)
#header.setResizeMode(i, width2columns[i])
for y, row in enumerate(_LIST_):
for x, col in enumerate(row):
item = QtGui.QTableWidgetItem(col)
view.setItem(y, x, item)
view.show()
sys.exit(app.exec_())
Vielleicht könnt Ihr mir dabei helfen, aufzuzeigen was grundsätzlich falsch ist und mich in die richtige Richtung bringen.
Grüße Nobuddy