QT如何在QTableWidget中的列头添加控件,请给我完整代码
时间: 2023-07-15 19:13:25 浏览: 177
要在QTableWidget的列头添加控件,需要自定义QHeaderView并将其设置为QTableWidget的水平表头。下面是完整的代码示例:
```python
from PyQt5 import QtWidgets, QtGui, QtCore
class MyHeader(QtWidgets.QHeaderView):
def __init__(self, parent):
super().__init__(QtCore.Qt.Horizontal, parent)
self.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
self._widget = QtWidgets.QComboBox(self)
self._widget.addItems(['Option 1', 'Option 2', 'Option 3'])
self.sectionResized.connect(self.adjust_widget)
def setModel(self, model):
super().setModel(model)
self.adjust_widget()
def adjust_widget(self, index=0):
rect = self.sectionViewportPosition(index)
height = self.height() - rect
self._widget.setGeometry(rect, 0, self.sectionSize(index), height)
class MyTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setHorizontalHeader(MyHeader(self))
self.setColumnCount(3)
self.setRowCount(5)
for row in range(5):
for col in range(3):
item = QtWidgets.QTableWidgetItem(f"Item {row+1}-{col+1}")
self.setItem(row, col, item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyTableWidget()
window.show()
sys.exit(app.exec_())
```
这个例子创建一个3列5行的表格,并在第一列的表头添加了一个下拉框控件。在MyHeader类中,我们创建了一个QComboBox控件并在构造函数中将其添加到自定义的表头控件中。我们还在setModel和adjust_widget方法中处理了控件的大小和位置。在MyTableWidget类中,我们将自定义的表头设置为QTableWidget的水平表头。
阅读全文