Martin Fitzpatrick
Senior Software Engineer, Python Tutor

Martin Fitzpatrick has been developing Python/Qt apps for 8 years. Building desktop applications to make data-analysis tools more user-friendly, Python was the obvious choice. Starting with Tk, later moving to wxWidgets and finally adopting PyQt. Martin founded PythonGUIs to provide easy to follow GUI programming tutorials to the Python community. He has written a number of popular Python books on the subject.

Understanding .parent() vs. Parent Class in PyQt6 Custom Widgets

Why self.parent() doesn't mean what you think it means

QDialog blocking main thread?

Understanding why QDialog.exec() blocks your application and how to fix it

QWebEngine in Qt Designer

How to use QWebEngineView and other custom widgets in your Qt Designer layouts

Updating a QProgressBar from a QRunnable in PyQt6

How to safely update GUI widgets from background threads using signals and slots

Using Qt Designer .ui Files with fbs for PyQt5 Packaging

Load your Qt Designer interfaces directly in fbs-based applications without converting to Python

Why are signals defined as class variables?

Understanding why PyQt6 and PySide6 signals live on the class, not in __init__

Clearing the canvas in QPainter

Fix the common black background issue when painting on a QPixmap in PyQt6

Elegant shutdown of running threads

How to gracefully shut down QThreadPool workers when closing your PyQt application

How to start/stop or pause running threads?

Control QRunnable workers in PyQt6 with start, stop, and pause functionality

Pause a running worker thread

Put a running task on hold, waiting for the UI

What does @pyqtSlot() do?

Is the pyqtSlot decorator even necessary?

What does @Slot() do?

Is the Slot decorator even necessary?

Understanding QPainter Coordinates in PyQt6

How the coordinate system works for drawing on canvases in PyQt6

How to Pass Additional Arguments to a QRunnable Worker Function

Solving common errors when passing parameters to threaded Worker functions in PyQt5

Resizing the QPainter canvas

How to make a QLabel drawing canvas resize with the window

Why Omitting "if role == Qt.DisplayRole" Makes Your QAbstractTableModel Look Strange

Understanding Qt roles and why your table suddenly shows checkboxes, checkmarks, and filled squares

How to Check if a QLineEdit is Empty in Python

Empty strings are falsey in Python

AttributeError module 'time' has no attribute 'clock'

Fix PyQtGraph 'time.clock' error in Python 3.8+

How to Add Custom Widgets to Qt Designer

Use widget promotion to integrate your own Python widgets into Qt Designer layouts

Using Complex Data Sources with PyQt6 Model/View Architecture

How to use JSON, nested data, and other complex structures in your Qt table and list views

Customizing the Size of a PyQtGraph Plot

Control where and how large your PyQtGraph plots appear in your PyQt5 application

Understanding .data() in Qt ModelView Models

How views retrieve data from your model using the data() method

Keeping Your Main Window Open After Closing a Dialog in PyQt6

Why your app closes when you dismiss a dialog, and how to fix it

Embedding Matplotlib Plots Alongside Other Widgets in PyQt6

How to use Matplotlib canvases as regular widgets in your PyQt6 layouts

ModelView Autoselection

How to automatically select items in a QListView using setCurrentIndex and QModelIndex
Showing articles for All (25) PyQt6 (14) PySide6 (0) PyQt5 (4) Streamlit (0) Tkinter (0) PySide2 (0) Kivy (0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18