qtableview+单元格自定义委托 实现时间策略表格
时间: 2023-06-23 12:07:56 浏览: 150
要实现时间策略表格,你可以使用 QTableView 和自定义委托来实现。
首先,你需要创建一个 QTableView 实例,并将其设置为可编辑。然后,你需要创建一个自定义委托来处理表格中单元格的显示和编辑。
下面是一个简单的示例代码,演示如何创建一个时间策略表格:
```python
from PyQt5.QtWidgets import QApplication, QTableView, QAbstractItemView, QHeaderView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtCore import Qt, QTime
class TimePolicyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, parent, option, index):
editor = QtWidgets.QTimeEdit(parent)
editor.setDisplayFormat("hh:mm")
return editor
def setEditorData(self, editor, index):
value = index.model().data(index, Qt.EditRole)
time = QTime.fromString(value, "hh:mm")
editor.setTime(time)
def setModelData(self, editor, model, index):
time = editor.time()
model.setData(index, time.toString("hh:mm"), Qt.EditRole)
class TimePolicyTableView(QTableView):
def __init__(self, parent=None):
super().__init__(parent)
self.setEditTriggers(QAbstractItemView.DoubleClicked)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.verticalHeader().setVisible(False)
self.setItemDelegate(TimePolicyDelegate(self))
self.setModel(QStandardItemModel())
self.model().setColumnCount(2)
self.model().setHeaderData(0, Qt.Horizontal, "时间段")
self.model().setHeaderData(1, Qt.Horizontal, "策略")
def addTimePolicy(self, time, policy):
row = self.model().rowCount()
self.model().setItem(row, 0, QStandardItem(time.toString("hh:mm")))
self.model().setItem(row, 1, QStandardItem(policy))
```
这个示例代码创建了一个名为 TimePolicyTableView 的自定义 QTableView 子类。它使用 QStandardItemModel 来存储时间策略表格中的数据,并使用 QHeaderView 和 QAbstractItemView 来设置表格的外观和行为。
自定义委托 TimePolicyDelegate 负责将时间数据显示为 QTimeEdit 控件,并将其转换回字符串格式,以便在模型中存储。
你可以使用 addTimePolicy 方法来向表格中添加时间策略。该方法将时间和策略作为参数,并将其插入到模型的新行中。
最后,你可以在主函数中创建 TimePolicyTableView 的实例,并将其添加到应用程序中。例如:
```python
if __name__ == "__main__":
app = QApplication(sys.argv)
table = TimePolicyTableView()
table.addTimePolicy(QTime(8, 0), "开门")
table.addTimePolicy(QTime(12, 0), "关门")
table.addTimePolicy(QTime(13, 0), "开门")
table.addTimePolicy(QTime(17, 0), "关门")
table.show()
sys.exit(app.exec_())
```
这将创建一个简单的时间策略表格,其中包含四个时间段和相应的策略。
阅读全文