Reputation: 406
I have a QTableWidget
item. I fill this item with pandas DataFrame
data. I must print selected column values as a report. I can easily print data from DataFrame. However, I need to know verticalHeader
(QTableWidget
) labels to get data from 'DataFrame'. How can I get selected header labels from QTableWidget
?
I tried QTableWidget.selectionModel().selectedIndexes()
and QTableWidget.itemFromIndex()
method. I could only get items inside of the table not header labels.
Here is my table. I can get items under 'Product No', 'Product Option' and 'List Price (USD)' headers but I can't get these headers.
Upvotes: 4
Views: 10880
Reputation: 6112
You can use QTableWidget.verticalHeaderItem()
with the table's current row. If the selected cells are all in the same row, you could do this (table
refers to the QTableWidget).
row = table.currentRow()
label = table.verticalHeaderItem(row).text()
Or if cells are selected over multiple rows:
rows = set(cell.row() for cell in table.selectedIndexes()) # set to remove duplicates, otherwise use a list
labels = [table.verticalHeaderItem(r).text() for r in rows]
In the case that a row does not contain a vertical header item, use the text()
method only after you've checked that item returned is not None.
headers = [table.verticalHeaderItem(r) for r in rows]
labels = [x.text() for x in headers if x is not None]
Edit: Those are horizontal header items, not vertical. In that case use table.horizontalHeaderItem()
instead and get cell columns.
Upvotes: 7