我有一个脚本,可以在一个列表中以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。
我的主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结束,但表是空的?
你定义了两个不同实例的 QMainWindow
即 MainWindow
和 ui
. 每一个都有一个 QTableView
设置为他们的中心部件,但你只为其中的一个部件设置了一个模型,即 ui.centralWidget()
. 然而,显示的是另一个窗口。MainWindow
它的表视图没有设置模型。
由于你似乎一直在编辑一个由 Qt Designer + pyuic 生成的 .py 文件,我建议你从 pyuic 中重新生成 .py 文件,而不是直接编辑它(这总是一个坏主意),创建一个单独的 .py 文件,在这里你定义一个继承于 Qt Designer + pyuic 的类。QMainWindow
和 Ui_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_()