微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

出现表格前的QtableView占位符文本

如何解决出现表格前的QtableView占位符文本

我有一个非常简单的QtableView,它在程序运行后填充。该程序需要几秒钟才能像这样填充表格。

enter image description here

我想知道如何在程序运行之前在QTableView上启用占位符文本“ No data” ...

enter image description here

解决方法

您必须重写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_())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。