qtableview+单元格自定义委托 实现时间策略表格 完整代码
时间: 2023-06-20 08:05:02 浏览: 160
QT中级(2)QTableView自定义委托(二)实现QProgressBar委托
这里提供一个简单的示例代码,用于实现一个基于QTableView和自定义委托的时间策略表格。
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QHeaderView, QAbstractItemView, QWidget, QVBoxLayout, QStyledItemDelegate
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtGui import QStandardItemModel, QStandardItem
class TimeDelegate(QStyledItemDelegate):
def createEditor(self, parent, option, index):
editor = QTimeEdit(parent)
editor.setDisplayFormat("HH:mm:ss")
return editor
def setEditorData(self, editor, index):
time = index.model().data(index, Qt.EditRole)
editor.setTime(time)
def setModelData(self, editor, model, index):
time = editor.time()
model.setData(index, time, Qt.EditRole)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建模型
self.model = QStandardItemModel(24, 7)
# 设置表头
self.model.setHorizontalHeaderLabels(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
# 填充数据
for row in range(24):
for col in range(7):
item = QStandardItem("00:00:00")
item.setTextAlignment(Qt.AlignCenter)
self.model.setItem(row, col, item)
# 创建视图
self.view = QTableView(self)
self.view.setModel(self.model)
# 设置委托
delegate = TimeDelegate(self.view)
self.view.setItemDelegate(delegate)
# 设置表格属性
self.view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.view.setSelectionBehavior(QAbstractItemView.SelectItems)
self.view.setSelectionMode(QAbstractItemView.SingleSelection)
self.view.setEditTriggers(QAbstractItemView.DoubleClicked)
# 设置主窗口属性
self.setCentralWidget(self.view)
self.setGeometry(100, 100, 800, 600)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个示例代码中,我们创建了一个QStandardItemModel作为数据源,并使用QTableView来显示表格。我们还创建了一个自定义委托TimeDelegate,用于在单元格中显示时间编辑器。
在创建模型时,我们使用setHorizontalHeaderLabels()方法设置了表头,并使用setItem()方法将QStandardItem添加到模型中。
在创建视图时,我们将模型设置为视图的数据源,并将TimeDelegate设置为单元格的委托。我们还使用setSelectionBehavior()方法将选择行为设置为选择单元格,并使用setSelectionMode()方法将选择模式设置为单选模式。
最后,在主窗口中,我们将视图设置为中心窗口,并设置窗口的大小和位置。
阅读全文