python - PyQt5:如何在多次覆盖后恢复默认光标?
问题描述
有没有办法将鼠标光标图标行为重置为 Windows 默认值?
当一个长时间的进程运行时,我想显示一个等待的鼠标光标图标,它可以完成工作:
# Set the mouse cursor to wait cursor
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
# Long process start
# Long process end
#reset mouse cursor to default behaviour
QtWidgets.QApplication.restoreOverrideCursor()
问题是当我在漫长的过程中运行一个方法或事件或任何也调用 setOverrideCursor 的东西时:
# Set the mouse cursor to wait cursor
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
# Long process start
# In the long process theres a method or event or whatever that calls again the wait cursor
# and wait cursor becomes the overwritten mouse cursor
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
# Some code running...
QtWidgets.QApplication.restoreOverrideCursor()
# Long process end
# the restoreOverrideCursor() restores the wait cursor instead of the default mouse cursor behaviour
# and the mouse icon just spinning forever
QtWidgets.QApplication.restoreOverrideCursor()
我试过这个,而不是 restoreOverrideCursor():
QtWidget.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
但它用箭头光标覆盖每个行为的问题,例如窗口调整大小图标等等。
有没有办法恢复 PyQt5 中的默认鼠标行为?
解决方案
要确保重置默认光标,您可以执行以下操作:
while QApplication.overrideCursor() is not None:
QApplication.restoreOverrideCursor()
这是必需的,因为 Qt 维护了一个覆盖游标的内部堆栈,而restoreOverrideCursor只撤消最后一个。