问题描述
如何在按下按钮时更新 QTableView?利用 Pandas 数据框和标准设置作为表的数据源。我知道它不是(addWidget(self.view) 只被调用一次),但是我需要更改什么才能更新它? (代码中的打印(数据)确认数据帧正在更新)
class QModel(QAbstractTableModel):
def __init__(self,data):
QAbstractTableModel.__init__(self)
self._data = data
def rowCount(self,parent=None):
return self._data.shape[0]
def columnCount(self,parent=None):
return self._data.shape[1]
def data(self,index,role=Qt.displayRole):
if index.isValid():
if role == Qt.displayRole:
return str(self._data.iloc[index.row(),index.column()])
return None
def headerData(self,col,orientation,role):
if orientation == Qt.Horizontal and role == Qt.displayRole:
return self._data.columns[col]
return None
class Tabs_Widget(QWidget):
def __init__(self):
super().__init__()
self.setwindowTitle('Adjustments')
self.df = pd.DataFrame()
self.add = QPushButton('Add Line')
self.add.clicked.connect(self.addLine)
self.viewmodel = self.tableView(self.df)
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.add)
self.layout.addWidget(self.view)
self.show()
def addLine(self,items):
self.df = self.df.append([[1,2]])
# print(self.df)
self.tableView(self.df)
def tableView(self,data):
print("data")
print(data)
model = QModel(data)
self.view = QTableView()
self.view.setModel(model)
self.view.setAlternatingRowColors(True)
self.view.setSizeAdjustPolicy(QTableView.AdjustToContents)
if __name__ == '__main__':
app = 0
app = QApplication(sys.argv)
win = Tabs_Widget()
sys.exit(app.exec_())
解决方法
class Tabs_Widget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Adjustments')
self.df = pd.DataFrame()
self.model = QModel(self.df)
self.view = QTableView()
self.view.setModel(self.model)
self.view.setAlternatingRowColors(True)
self.view.setSizeAdjustPolicy(QTableView.AdjustToContents)
self.add = QPushButton('Add Line')
self.add.clicked.connect(self.addLine)
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.add)
self.layout.addWidget(self.view)
self.show()
def addLine(self,items):
self.df = self.df.append([[1,2]])
self.view.setModel(QModel(self.df))