[파이썬] PyQt 테이블 뷰 (`QTableView`) 및 테이블 모델

PyQt is a powerful Python library for creating desktop applications with a graphical interface. One of the key components in PyQt is the QTableView, which provides a powerful and flexible way to display and interact with tabular data. In this blog post, we will explore how to use the QTableView and how to create a table model in Python.

What is a QTableView?

The QTableView widget is a container for displaying and editing complex data sets in a tabular format. It provides a convenient way to view and manipulate data in a spreadsheet-like manner. The QTableView can be customized to display data in different ways, including sorting, searching, and filtering.

Creating a QTableView

To create a QTableView in PyQt, you first need to import the necessary modules:

from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
from PyQt5.QtCore import Qt

Then, you can create an instance of QTableView:

app = QApplication([])
window = QMainWindow()
table_view = QTableView()
window.setCentralWidget(table_view)
window.show()
app.exec()

In the code above, we create a QApplication instance, create a main window (QMainWindow), create a QTableView instance, set the QTableView as the central widget of the main window, and finally, show the main window.

Creating a Table Model

A table model is a class that provides the data for the QTableView. It is responsible for retrieving and updating the data to be displayed in the table. PyQt provides the QAbstractTableModel class as a base class for creating custom table models. Let’s create a simple table model that displays a 3x3 grid of numbers:

from PyQt5.QtCore import QAbstractTableModel, QVariant

class MyTableModel(QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self.data = data

    def rowCount(self, parent):
        return len(self.data)

    def columnCount(self, parent):
        return len(self.data[0])

    def data(self, index, role):
        if role == Qt.DisplayRole:
            return str(self.data[index.row()][index.column()])
        return QVariant()

In the code above, we create a subclass of QAbstractTableModel called MyTableModel. We override the rowCount and columnCount methods to specify the number of rows and columns in our data. We also override the data method to provide the data to be displayed in the table. The Qt.DisplayRole role is used to specify that we want to display the data.

Setting the Table Model

To set the table model for our QTableView, we can simply create an instance of our MyTableModel class and pass it to the setModel method of the QTableView:

data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

model = MyTableModel(data)
table_view.setModel(model)

In the code above, we create a data list with some sample data. We then create an instance of MyTableModel with the data and set it as the model for our QTableView.

Conclusion

In this blog post, we explored how to use the PyQt QTableView widget to display tabular data in a graphical interface. We also learned how to create a custom table model to provide the data for the QTableView. With PyQt and QTableView, you have the power to create dynamic and interactive tables in your Python applications.

I hope you found this blog post helpful! Feel free to leave your comments and questions below.