向QTimer传递参数超时信号?

问题描述 投票:0回答:2

我正在使用 Python 和 PySide(PyQt 的替代品)。我有一个在后台运行的应用程序,我想使用 QTimer 来安排一些要执行的任务。

但是,我需要 QTimer 来调用程序中的一个方法,但该方法需要“初始化参数”来指定方法到底应该做什么。

我是否正确地认为我需要子类化 QTimer 并重写

timeout
start
方法?如果是这样,那么我会选择哪一个以及如何去做呢?我几乎没有重写现有方法的经验,谷歌搜索也没有找到很多结果(有一些我不明白的 C++ 结果)。我设法做了一些事情(例如,我覆盖了
start()
方法,但是原始 start 方法的代码没有执行(可以理解),而且我不知道该代码应该是什么。

或者还有其他方法吗?

python qt pyqt scheduled-tasks
2个回答
7
投票

但是,我需要 QTimer 来调用程序中的一个方法,但该方法需要“初始化参数”来指定方法到底应该做什么。

初始化参数有变化吗?我可能会做一些涉及 functools.partial 的事情来绑定一些参数,所以如果你有这个

import functools
from PySide.QtCore import QTimer

def onTimer(initParams):
    # use initParams
    # your code here...

myInitParams = "Init!"
timerCallback = functools.partial(onTimer, initParams=myInitParams)
myTimer = QTimer()
myTimer.timeout.connect(timerCallback)
myTimer.start( 1000) #once a sec

#Your QApplication goes below...

如果您想根据应用程序的某些当前条件提供不同的初始化参数,您可能最好根据特定项目的更改时间使用自定义信号/槽。或者维持我在其他地方修改 initParams 的“当前”状态。


0
投票

不会

myTimer.timeout.connect(lambda param1, param2, ..., arg1=val1, arg2= value2, ... : fun(param1, param2,... , arg1, arg2, ....))

也工作?

© www.soinside.com 2019 - 2024. All rights reserved.