解析PyQt5 Tableview中包含列表的信号发出的信号

问题描述 投票:0回答:1

我有一个脚本,可以在一个列表中以dict格式返回数据。所以我的列表 数据[] 包含以下数据


[['https://www.impasd.com.au/', 'https://www.impasd.com.au/who-we-are/'],['697559', '459048'], ['Full Service', 'Agency Partner']]

我想在PyQt5 TableView中的一个Table中显示这些数据,我把它定义为folow。数据的更新是实时的,所以我想在数据更新时继续更新表格。

现在我有一个PyQt5的窗口,看起来像下面。大的白色部分被定义为一个TabelView。enter image description here

我的主PyQt5代码是main.py。

class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self) :
        super().__init__()

        self.table = QtWidgets.QTableView()
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1327, 901)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(0, 0, 1331, 851))
        self.tableView.setObjectName("tableView")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

data = [['https://www.impasd.com.au/', 'https://www.impasd.com.au/who-we-are/'], ['697559', '459048'], ['Full Service', 'Agency Partner']]

        self.model = TableModel( data )
        self.table.setModel( self.model )

        self.setCentralWidget( self.table )

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

当进程运行时,我的数据在主类中是可用的,我还在主类中定义了一个模型。

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self, data):
        super(TableModel, self).__init__()
        self._data = data
        print(self._data)

    def data(self, index, role):
        if role == Qt.DisplayRole:
            # See below for the nested-list data structure.
            # .row() indexes into the outer list,
            # .column() indexes into the sub-list
            return self._data[index.row()][index.column()]

    def rowCount(self, index):
        # The length of the outer list.
        return len(self._data)

    def columnCount(self, index):
        # The following takes the first sub-list, and returns
        # the length (only works if all rows are an equal length)
        return len(self._data[0])

而且没有显示表格。我可能做错了什么?

我现在已经把我的结果[]转换成了一个列表,所以问题略有变化。"解析一个发出信号的列表,其中包含了 列表 在PyQt5 Tableview中"

在过去的几个小时里,我也取得了一些进展,所以窗口触发了,我没有得到任何错误,程序以退出代码0结束,但表是空的?

python pyqt pyqt5 qtableview
1个回答
1
投票

你定义了两个不同实例的 QMainWindowMainWindowui. 每一个都有一个 QTableView 设置为他们的中心部件,但你只为其中的一个部件设置了一个模型,即 ui.centralWidget(). 然而,显示的是另一个窗口。MainWindow它的表视图没有设置模型。

由于你似乎一直在编辑一个由 Qt Designer + pyuic 生成的 .py 文件,我建议你从 pyuic 中重新生成 .py 文件,而不是直接编辑它(这总是一个坏主意),创建一个单独的 .py 文件,在这里你定义一个继承于 Qt Designer + pyuic 的类。QMainWindowUi_MainWindow 来设置你的主窗口。所以,假设 Ui_MainWindow.py 是Qt Designer的输出文件,您可以创建一个不同的.py文件,并做如下操作。

import QtWidgets, QtCore
import Ui_MainWindow, TableModel

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        data = [['https://www.impasd.com.au/', 'https://www.impasd.com.au/who-we-are/'], 
                ['697559', '459048'], ['Full Service', 'Agency Partner']]
        self.setupUi(self)
        self.model = TableModel(data)
        self.tableView.setModel(self.model)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    main_window = MainWindow()
    main_window.show()
    app.exec_()
© www.soinside.com 2019 - 2024. All rights reserved.