PyQt堆叠的小部件在函数结束之前不会移动到下一页



嗨,我有一个程序,当按下按钮时,它应该移动到下一个堆叠的小部件,替换一些标签中的一些文本,然后执行一些功能,但这不起作用,当功能完成时,它会移到下一页代码为:

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,然后移动到下一个堆叠的小部件页面,加载动画图像,然后运行函数

您可能需要让Qt处理事件,以便选项卡更改生效。你可以用两种方法:

  1. animation()runFunctions()之间插入qApp.processEvents()qAppPyQt5.QtWidgets中)
  2. 通过单触发定时器调用runFunctions()QTimer.singleShot(0, runFunctions),它将通过事件循环调用runFunctions,因此任何挂起的事件都将首先被处理(因为runFunctions()是最新添加的),然后调用runFunctions()。如果您实际上有runFunctions()的params,请使用lambda

我喜欢第一种方法,因为我发现它更清楚地指示了正在发生的事情(需要处理事件),但我也建议在那一行添加一条注释,"这样堆栈选项卡就可以更改"。

顺便说一句,你应该使用新型的信号插槽连接符号,更干净,形式为"signal.connect(插槽)":

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()
...

相关内容

  • 没有找到相关文章

最新更新