在QTableView中添加占位文本可以使用QStandardItemModel来实现。下面是一个代码示例:
from PyQt5.QtWidgets import QApplication, QTableView, QVBoxLayout, QWidget, QLabel, QHeaderView, QAbstractItemView, QStandardItemModel
class TableView(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("TableView Placeholder Text")
self.layout = QVBoxLayout()
self.table_view = QTableView()
# 创建一个QStandardItemModel来存储表格数据
self.model = QStandardItemModel(self)
# 设置表格列数
self.model.setColumnCount(3)
# 设置表格行数
self.model.setRowCount(5)
# 设置表头
self.model.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"])
# 填充表格数据
for row in range(self.model.rowCount()):
for col in range(self.model.columnCount()):
item = QStandardItem(f"Item {row+1}-{col+1}")
self.model.setItem(row, col, item)
# 设置表格的选择模式为单元格选择
self.table_view.setSelectionMode(QAbstractItemView.SingleSelection)
# 设置表格的编辑模式为只读
self.table_view.setEditTriggers(QAbstractItemView.NoEditTriggers)
# 设置表格的数据模型
self.table_view.setModel(self.model)
# 设置表头自适应列宽
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
# 在表格下方添加一个提示文本
self.placeholder_label = QLabel("No data available.")
self.placeholder_label.setAlignment(Qt.AlignCenter)
# 隐藏表格和提示文本
self.table_view.setVisible(False)
self.placeholder_label.setVisible(True)
self.layout.addWidget(self.table_view)
self.layout.addWidget(self.placeholder_label)
self.setLayout(self.layout)
# 绑定数据模型的变化信号,用于切换表格和提示文本的显示
self.model.dataChanged.connect(self.showTableView)
self.model.rowsInserted.connect(self.showTableView)
self.model.rowsRemoved.connect(self.showTableView)
def showTableView(self):
# 如果数据模型有数据,则显示表格,否则显示提示文本
if self.model.rowCount() > 0:
self.table_view.setVisible(True)
self.placeholder_label.setVisible(False)
else:
self.table_view.setVisible(False)
self.placeholder_label.setVisible(True)
if __name__ == "__main__":
app = QApplication([])
window = TableView()
window.show()
app.exec_()
在上述代码中,首先创建了一个QStandardItemModel来存储表格数据。然后,使用setHorizontalHeaderLabels方法设置表头,使用setColumnCount和setRowCount方法设置表格的列数和行数。接下来,使用setItem方法填充表格数据。在showTableView方法中,根据数据模型的变化,切换表格和提示文本的显示。最后,通过绑定数据模型的dataChanged、rowsInserted和rowsRemoved信号来实现自动切换显示。