Search code examples
pythonpyqtpyqt5pyqt4mouse-cursor

How can I change the cursor shape with PyQt?


I have a simple application that runs a process that can last for several minutes before completing. I am trying to provide an indication to the user that it is processing the request - such as changing the cursor to an hourglass.

But I cannot quite get it to work right. All of my attempts have resulted in either an error or had no effect. And I seem to be calling the cursor shapes incorrectly, since PyQt4.Qt.WaitCursor returns an error that the module does not contain it.

What is the correct way to indicate to the user that the process is running?


Solution

  • I think QApplication.setOverrideCursor is what you're looking for:

    PyQt6:

    from PyQt6.QtCore import Qt
    from PyQt6.QtWidgets import QApplication
    ...
    QApplication.setOverrideCursor(Qt.CursorShape.WaitCursor)
    # do lengthy process
    QApplication.restoreOverrideCursor()
    

    PyQt5:

    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QApplication
    ...
    QApplication.setOverrideCursor(Qt.WaitCursor)
    # do lengthy process
    QApplication.restoreOverrideCursor()
    

    PyQt4:

    from PyQt4.QtCore import Qt
    from PyQt4.QtGui import QApplication
    ...
    QApplication.setOverrideCursor(Qt.WaitCursor)
    # do lengthy process
    QApplication.restoreOverrideCursor()