嗨我有一个程序,当按下按钮时,它应移动到下一个堆叠小部件替换某些标签中的某些文本然后执行某些功能但这不起作用并在功能完成时移动到下一页 代码是:
QtCore.QObject.connect(self.StartBtn, QtCore.SIGNAL(_fromUtf8("clicked()")), self.start) #Start
def nextPage(self):
current_page = self.stackedWidget.currentIndex()
i = int(current_page) + 1
self.stackedWidget.setCurrentIndex(i)
def start(self):
self.nextPage()
self.animation()
self.runFunctions()
def runFunctions(self):
try:
self.DbLabel.setText(_translate("MainWindow", "Checking Database", None))
if checkDb == True:
self.DbLabel.setText(_translate("MainWindow", "Checking Database ", None))
self.checkDbFun()
self.DbLabel.setText(_translate("MainWindow", "Database checked", None))
else:
self.checkedDbImg.setPixmap(QtGui.QPixmap(_fromUtf8("Files\\x.png")))
self.DbLabel.setText(_translate("MainWindow", "Database not checked", None))
except Exception as e:
self.AlertMessage(e)
def animation(self):
self.LoadingGif = QtGui.QLabel(MainWindow)
movie = QtGui.QMovie("Files\\loading.png")
self.LoadingGif.setMovie(movie)
self.LoadingGif.setAlignment(QtCore.Qt.AlignCenter)
self.gridLayout_2.addWidget(self.LoadingGif, 4, 1, 1, 1)
movie.start()
所以我想要的是按StartBtn然后移动到下一个堆叠小部件页面加载动画图像然后运行函数
答案 0 :(得分:1)
您可能需要让Qt处理事件才能使标签更改生效。你可以这两种方式:
qApp.processEvents()
和animation()
之间插入runFunctions()
(qApp
位于PyQt5.QtWidgets
)runFunctions()
:QTimer.singleShot(0, runFunctions)
,这将通过事件循环使用runFunctions
,因此将首先处理所有待处理事件(因为runFunctions()
是最新添加的),然后runFunctions()
将被调用。如果你实际上有runFunctions()
的参数,请使用lambda。 我赞成第一种方法,因为我发现它更清楚地表明发生了什么(事件需要处理),但我建议在该行添加一条评论“所以堆栈标签可以改变”。
顺便说一句,你应该使用新式的信号槽连接符号,更清晰,形式为“signal.connect(slot)”:
self.StartBtn.clicked.connect(self.start)
因此,对于方法#1,您的代码将如下所示:
from PyQt5.QtWidgets import qApp
...
self.StartBtn.clicked.connect(self.start)
...
def start(self):
self.nextPage()
self.animation()
qApp.processEvents()
self.runFunctions()
...