首页 > 解决方案 > 如何从连接函数中获取返回值

问题描述

我想获取 checkFinish 函数的返回值,如果我得到的值为 False,目的是做“某事”,有没有办法获取由 connect 函数启动的函数的返回值?(同时询问按钮,因为它可能是相同的方式。)

代码:

from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import *
from functools import partial

registered = False
loginClick = False

def login():
    global loginClick
    loginClick = True


def checkFinish():
    global registered, loginClick
    if loginClick or registered:
        return False
    else: 
        return True


def register_form():
    global registered, loginClick
    app = QtWidgets.QApplication([])
    dlg = uic.loadUi("registerForm.ui")
    dlg.usernameLine.setFocus()
    dlg.logInButton.clicked.connect(login)
    dlg.timer = QTimer(dlg, interval=5)
    dlg.timer.timeout.connect(checkFinish) # Get the return value from here.
    #if dlg.timer.timeout.connect(checkFinish): do something example
    dlg.timer.start()
    dlg.show()
    app.exec()

假设我单击 logInButton,登录函数会将 loginClick 的值更改为 True,并且由于计时器而在后台运行的函数 checkFinish 将返回 False,问题再次是如何在 register_form 函数中获取该 False 值我启动计时器。

标签: pythonpython-3.xpyqtpyqt5

解决方案


该信号仅用于调用函数并向其传递一些参数,因此您无法获得调用函数的结果。正确的逻辑是调用另一个计算初始函数的函数:

# ...
dlg.timer = QTimer(dlg, interval=5)
def onTimeout():
    if checkFinish():
        print("finish")
dlg.timer.timeout.connect(onTimeout)
dlg.timer.start()
# ...

推荐阅读