Even better: print(dir(QPushButton)) listed all methods, signals, and slots. She found pressed , released , clicked – all available.
The had a special page: “Support for Qt’s model‑view framework” — it explained beginInsertRows , data() role handling, and crucially: “The model must be stored as an attribute of the window or parented to the view.” Sam’s bug vanished when she changed: pyqt6 documentation
from PyQt6.QtWidgets import QPushButton help(QPushButton.setText) Showed: setText(self, str) – no surprises. The C++ docs explained QAbstractListModel beautifully
dark_action = QAction("Dark mode", checkable=True) dark_action.toggled.connect(self.toggle_dark_mode) It worked perfectly. She felt the power. Next, she needed a QListView with custom thumbnails. The C++ docs explained QAbstractListModel beautifully. But PyQt6 adds ownership rules: if you create a model in Python and assign it to a view, you must keep a reference (or parent it) to avoid garbage collection. dark_action = QAction("Dark mode"
Her app shipped. Users loved the dark mode. And Sam finally stopped fearing the documentation – she befriended it. Start here → PyQt6 Reference Learn the concepts here → Qt6 Documentation And always test small pieces with help(ClassName) in Python.