Python PyQt5 TableView杀死内核

Python PyQt5 TableView杀死内核,python,python-3.x,pyqt5,qtableview,qabstracttablemodel,Python,Python 3.x,Pyqt5,Qtableview,Qabstracttablemodel,因此,我目前只从ZeroMQ消息传递系统获取有限的数据,将其全部附加到数据帧,然后将数据帧转换为熊猫模型,并使用从堆栈上的某个人那里获取的代码。然后通过PyQt5表视图运行该模型 每次运行tableview代码时,在将数据帧转换为tableview的模型之后,内核就消失了。我试图至少处理一个异常,但它甚至不会引发超级一般的运行时错误。它每次都会死去 出于测试目的,im使用CSV和数据,试图将其纳入可行的模型。您可以使用您端上的任何csv或数据来测试这一点,因为没有硬编码格式 from PyQt5

因此,我目前只从ZeroMQ消息传递系统获取有限的数据,将其全部附加到数据帧,然后将数据帧转换为熊猫模型,并使用从堆栈上的某个人那里获取的代码。然后通过PyQt5表视图运行该模型

每次运行tableview代码时,在将数据帧转换为tableview的模型之后,内核就消失了。我试图至少处理一个异常,但它甚至不会引发超级一般的运行时错误。它每次都会死去

出于测试目的,im使用CSV和数据,试图将其纳入可行的模型。您可以使用您端上的任何csv或数据来测试这一点,因为没有硬编码格式

from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd


class PandasModel(QtCore.QAbstractTableModel):     
    def __init__(self, df = pd.DataFrame(), parent=None): 
        QtCore.QAbstractTableModel.__init__(self, parent=parent)
        self._df = df

    def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return QtCore.QVariant()

        if orientation == QtCore.Qt.Horizontal:
            try:
                return self._df.columns.tolist()[section]
            except (IndexError, ):
                return QtCore.QVariant()
        elif orientation == QtCore.Qt.Vertical:
            try:
                # return self.df.index.tolist()
                return self._df.index.tolist()[section]
            except (IndexError, ):
                return QtCore.QVariant()

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return QtCore.QVariant()

        if not index.isValid():
            return QtCore.QVariant()

        return QtCore.QVariant(str(self._df.ix[index.row(), index.column()]))

    def setData(self, index, value, role):
        row = self._df.index[index.row()]
        col = self._df.columns[index.column()]
        if hasattr(value, 'toPyObject'):
            # PyQt4 gets a QVariant
            value = value.toPyObject()
        else:
            # PySide gets an unicode
            dtype = self._df[col].dtype
            if dtype != object:
                value = None if value == '' else dtype.type(value)
        self._df.set_value(row, col, value)
        return True

    def rowCount(self, parent=QtCore.QModelIndex()): 
        return len(self._df.index)

    def columnCount(self, parent=QtCore.QModelIndex()): 
        return len(self._df.columns)

    def sort(self, column, order):
        colname = self._df.columns.tolist()[column]
        self.layoutAboutToBeChanged.emit()
        self._df.sort_values(colname, ascending= order == QtCore.Qt.AscendingOrder, inplace=True)
        self._df.reset_index(inplace=True, drop=True)
        self.layoutChanged.emit()   


def createview(title, model):
    try:
        view = QtWidgets.QTableView()
        view.setWindowview
    except:
        raise RuntimeError("I know python!")


if __name__=="__main__":
    df=pd.read_csv("C:\Excel Sheets\Test_CSV_6-18-18.csv")
    model = PandasModel(df)
    createview("Model", model)

可能重复使用:
def createview(title,model):import sys app=QtWidgets.QApplication(sys.argv)view=QtWidgets.QTableView()view.setWindowTitle(title)view.setModel(model)view.show()sys.exit(app.exec_u2;())
。你太棒了。谢谢。我建议您在继续之前阅读PyQt教程,您的问题表明您对PyQt一无所知。您部分正确。我不知道为什么我错过了整个view.show(),但是我不知道sys.exit(app.exe)。我要跳上那个教程