PyQt5 QTableView 在按钮单击时更新视图

时间:2021-02-03 06:46:37

标签: python pyqt5 qtableview

如何在按下按钮时更新 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_())

1 个答案:

答案 0 :(得分:0)

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))