Python 显示表之前的QtableView占位符文本
我有一个非常简单的QtableView,类似于在程序运行后填充的。程序需要几秒钟才能像这样填充表 我想知道在程序像这样运行之前,如何在QTableView上启用占位符text No dataPython 显示表之前的QtableView占位符文本,python,python-3.x,pyside2,qtableview,Python,Python 3.x,Pyside2,Qtableview,我有一个非常简单的QtableView,类似于在程序运行后填充的。程序需要几秒钟才能像这样填充表 我想知道在程序像这样运行之前,如何在QTableView上启用占位符text No data 必须重写paintEvent方法,在该方法中检查是否没有模型或模型没有行,然后绘制占位符文本: from PySide2 import QtCore, QtGui, QtWidgets class TableView(QtWidgets.QTableView): def paintEvent(s
必须重写paintEvent方法,在该方法中检查是否没有模型或模型没有行,然后绘制占位符文本:
from PySide2 import QtCore, QtGui, QtWidgets
class TableView(QtWidgets.QTableView):
def paintEvent(self, event):
super().paintEvent(event)
if self.model() is not None and self.model().rowCount() > 0:
return
painter = QtGui.QPainter(self.viewport())
painter.save()
col = self.palette().placeholderText().color()
painter.setPen(col)
fm = self.fontMetrics()
elided_text = fm.elidedText(
"No data", QtCore.Qt.ElideRight, self.viewport().width()
)
painter.drawText(self.viewport().rect(), QtCore.Qt.AlignCenter, elided_text)
painter.restore()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = TableView()
model = QtGui.QStandardItemModel(0, 3)
w.setModel(model)
w.resize(640, 480)
w.show()
def on_timeout():
if model.rowCount() > 0:
model.setRowCount(0)
else:
for j in range(4):
items = [
QtGui.QStandardItem(f"item ({j}-{i})")
for i in range(model.columnCount())
]
model.appendRow(items)
timer = QtCore.QTimer(interval=1000, timeout=on_timeout)
timer.start()
sys.exit(app.exec_())
必须重写paintEvent方法,在该方法中检查是否没有模型或模型没有行,然后绘制占位符文本:
from PySide2 import QtCore, QtGui, QtWidgets
class TableView(QtWidgets.QTableView):
def paintEvent(self, event):
super().paintEvent(event)
if self.model() is not None and self.model().rowCount() > 0:
return
painter = QtGui.QPainter(self.viewport())
painter.save()
col = self.palette().placeholderText().color()
painter.setPen(col)
fm = self.fontMetrics()
elided_text = fm.elidedText(
"No data", QtCore.Qt.ElideRight, self.viewport().width()
)
painter.drawText(self.viewport().rect(), QtCore.Qt.AlignCenter, elided_text)
painter.restore()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = TableView()
model = QtGui.QStandardItemModel(0, 3)
w.setModel(model)
w.resize(640, 480)
w.show()
def on_timeout():
if model.rowCount() > 0:
model.setRowCount(0)
else:
for j in range(4):
items = [
QtGui.QStandardItem(f"item ({j}-{i})")
for i in range(model.columnCount())
]
model.appendRow(items)
timer = QtCore.QTimer(interval=1000, timeout=on_timeout)
timer.start()
sys.exit(app.exec_())
仅供参考,对于使用Pyside2的用户,您只需从几行中删除“QtCore”即可使表视图正常工作,否则将出现依赖性问题。仅供参考,对于使用Pyside2的用户,您只需从几行中删除“QtCore”即可使表视图正常工作,否则将出现依赖性问题。