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