import sys
from PySide6.QtCore import QTimer, QObject, QLibraryInfo, QOperatingSystemVersion, qVersion, Qt
from PySide6.QtGui import QStandardItemModel, QShortcut
from PySide6.QtWidgets import QApplication, QComboBox, QVBoxLayout, QWidget


class Watcher(QObject):

    def __init__(self, parent: QWidget):
        super().__init__(parent)
        parent.installEventFilter(self)

    def eventFilter(self, watched, event):
        print(watched.objectName(), event)
        return super().eventFilter(watched, event)


class MainWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.setObjectName('-- mainwin --')
        self.combo = QComboBox()
        self.combo.setModel(QStandardItemModel())
        layout = QVBoxLayout(self)
        layout.addWidget(self.combo)
        self.watcher = Watcher(self)
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.test)
        self.timer.start(100)

    def test(self):
        sels = [1, 2, 3, 4, 5, 6]
        cbx = self.combo
        model = cbx.model()
        cbx.clear()
        cbx.insertItems(0, [f'Item.{no}' for no in sels])
        for (idx, no) in enumerate(sels):
            itm = model.item(idx)
            print(f'test(): set model item {idx=} {no=} {itm=}')


if __name__ == "__main__":
    pv = 'Python {}.{}.{}'.format(sys.version_info[0], sys.version_info[1], sys.version_info[2])
    print(pv)
    print(QLibraryInfo.build())
    print("OS Name", QOperatingSystemVersion.current().name())
    app = QApplication(sys.argv)
    window = MainWindow()
    sc = QShortcut(Qt.KeyboardModifier.ControlModifier | Qt.Key.Key_Q, window)
    sc.activated.connect(window.close)
    t = app.platformName() + ' ' + qVersion() + ' ' + app.style().objectName() + ' ' + pv
    print(t)
    window.setWindowTitle(t)
    window.show()
    ex = app.exec()
    print('quit', ex, t)
    sys.exit(ex)
