ekh*_*oro 41
我认为QApplication.setOverrideCursor是您正在寻找的:
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
...
QApplication.setOverrideCursor(Qt.WaitCursor)
# do lengthy process
QApplication.restoreOverrideCursor()
Run Code Online (Sandbox Code Playgroud)
dbc*_*dbc 13
虽然Cameron和David的答案很适合将等待光标设置在整个函数上,但我发现上下文管理器最适合设置代码片段的等待光标:
from contextlib import contextmanager
from PyQt4 import QtCore
from PyQt4.QtGui import QApplication, QCursor
@contextmanager
def wait_cursor():
try:
QApplication.setOverrideCursor(QCursor(QtCore.Qt.WaitCursor))
yield
finally:
QApplication.restoreOverrideCursor()
Run Code Online (Sandbox Code Playgroud)
然后将冗长的进程代码放在with块中:
with wait_cursor():
# do lengthy process
pass
Run Code Online (Sandbox Code Playgroud)
小智 10
ekhumoro的解决方案是正确的.该解决方案是为了风格而进行的修改.我使用了ekhumor所做的但使用了python装饰器.
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QCursor, QMainWidget
def waiting_effects(function):
def new_function(self):
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
try:
function(self)
except Exception as e:
raise e
print("Error {}".format(e.args[0]))
finally:
QApplication.restoreOverrideCursor()
return new_function
Run Code Online (Sandbox Code Playgroud)
我可以把装饰器放在我希望微调器处于活动状态的任何方法上.
class MyWigdet(QMainWidget):
# ...
@waiting_effects
def doLengthyProcess(self):
# do lengthy process
pass
Run Code Online (Sandbox Code Playgroud)