如何使用 PYQT 在按钮上 运行 一个接一个地执行一个函数

How to run one function only after another, at pushbutton using PYQT

我已阅读多篇关于此的帖子,但无法修复我的代码。

我正在 运行ning 一个 GUI(使用 PyQt5),它 运行 是来自另一个脚本(file_py)的函数(Extraction())。我想要做的是在开始时显示绿色 Led 图片 (.png) 的脚本,然后当单击按钮时,在 运行 宁 Extraction() 之前,GUI 将显示红色 Led 图片。

from PyQt5 import QtCore, QtGui, QtWidgets
import file_py as my_script

def setupUi(self, MainWindow):

        self.pushButton.clicked.connect(self.trigger_status_icon)
        
        self.LED_Green = QtGui.QPixmap("C:/Desktop/green-led-on.png")
        self.LED_Red = QtGui.QPixmap("C:/Desktop/red-led-on.png")
        self.labelStatus = QtWidgets.QLabel()
        self.labelStatus.setPixmap(self.LED_Green) #starting GUI with a Green Led picture
        self.labelStatus.setScaledContents(True)


    def trigger_status_icon(self):
        self.labelStatus.setPixmap(self.LED_Red)
        return self.run_Script()

    def run_Script(self):
        my_script.Extraction()

但我使用此代码得到的结果如下:在 GUI 的开头显示绿色 Led 图片。单击按钮后,函数 Extraction() 运行s,只有在它完成后,才会出现 LED 红色图片。

我该怎么做才能让红色 LED 图片在 Extraction() 功能之前 运行?

当您在 UI 中进行更改后进行一些“冗长”操作时,您可以使用 QWidget.update 方法显式刷新 UI:

def trigger_status_icon(self):
        self.labelStatus.setPixmap(self.LED_Red)
        self.update()
        return self.run_Script()

通过在分配图片后添加 QtWidgets.QApplication.processEvents() 将刷新 QtWidget。

def trigger_status_icon(self):
    self.labelStatus.setPixmap(self.LED_Red)
    QtWidgets.QApplication.processEvents()
    return self.run_Script()