QRangeModel Example

A Python application that demonstrates how to populate a QRangeModel using numpy or Python lists.

Models created from numpy arrays are editable.

It requires building PySide6 with the --pyside-numpy-support option.

Download this example

# Copyright (C) 2025 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import numpy
import sys

from PySide6.QtCore import QRangeModel
from PySide6.QtGui import QKeySequence
from PySide6.QtWidgets import QApplication, QListView, QMainWindow, QTableView, QTabWidget


STRING_LIST = ["item1", "item2", "item3", "item4"]
INT_LIST = [1, 2, 3]
INT_TABLE = [[1, 2], [3, 4], [5, 6]]

NP_INT_ARRAY = numpy.array([1, 2, 3], dtype=numpy.int32)
NP_DOUBLE_ARRAY = numpy.array([1.1, 2.2, 3.3], dtype=numpy.double)

NP_INT_TABLE = numpy.array([[1, 2, 3], [4, 5, 6]], dtype=numpy.int32)
NP_DOUBLE_TABLE = numpy.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]], dtype=numpy.double)


def print_numpy_data():
    print("--------------------------------")
    print("NP_INT_ARRAY=", NP_INT_ARRAY)
    print("NP_INT_TABLE=", NP_INT_TABLE)
    print("NP_DOUBLE_ARRAY=", NP_DOUBLE_ARRAY)
    print("NP_DOUBLE_TABLE=", NP_DOUBLE_TABLE)
    print("---------------------------------\n")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    window.setMinimumWidth(600)
    file_menu = window.menuBar().addMenu("File")
    file_menu.addAction("Output numpy data", print_numpy_data)
    file_menu.addAction("Quit", QKeySequence(QKeySequence.StandardKey.Quit), window.close)
    help_menu = window.menuBar().addMenu("Help")
    help_menu.addAction("About Qt", app.aboutQt)

    tab_widget = QTabWidget()
    window.setCentralWidget(tab_widget)

    list_view = QListView()
    model = QRangeModel(STRING_LIST)
    list_view.setModel(model)
    tab_widget.addTab(list_view, "Python String List")

    list_view = QListView()
    model = QRangeModel(INT_LIST)
    list_view.setModel(model)
    tab_widget.addTab(list_view, "Python int List")

    table_view = QTableView()
    model = QRangeModel(INT_TABLE)
    table_view.setModel(model)
    tab_widget.addTab(table_view, "Python Int Table")

    list_view = QListView()
    model = QRangeModel(NP_INT_ARRAY)
    list_view.setModel(model)
    tab_widget.addTab(list_view, "Numpy Int List")

    list_view = QListView()
    model = QRangeModel(NP_DOUBLE_ARRAY)
    list_view.setModel(model)
    tab_widget.addTab(list_view, "Numpy Double List")

    table_view = QTableView()
    model = QRangeModel(NP_INT_TABLE)
    table_view.setModel(model)
    tab_widget.addTab(table_view, "Numpy Int Table")

    table_view = QTableView()
    model = QRangeModel(NP_DOUBLE_TABLE)
    table_view.setModel(model)
    tab_widget.addTab(table_view, "Numpy Double Table")

    window.setWindowTitle("QRangeModel")
    window.show()
    sys.exit(app.exec())