2012-11-02 36 views
2

我使用Python和PySide(PyQt的替代)。我有一个在后台运行的应用程序,我想用QTimer来安排一些要执行的任务。将参数传递给QTimer超时信号?

不过,我需要的QTimer调用一个方法在我的程序,但这种方法需要“初始化参数”,将指定究竟什么是应该做的方法。

我是否正确认为我需要继承QTimer并覆盖timeoutstart方法?如果是这样,那么哪一个,我会怎么做呢?我几乎没有任何经验重写现有的方法和谷歌搜索没有露面了不少成果(也有一些用C++,我不明白)。我设法做了一些事情(例如我覆盖了start()方法,但是然后原始启动方法的代码不能执行(可以理解),并且我不知道该代码应该是什么样的。

或者有一些其他的方式?

回答

3

不过,我需要的QTimer调用一个方法在我的程序,但这种方法需要“初始化参数”,将指定究竟是什么方法应该做的。

初始化参数是否改变?我可能会做一些涉及012的事情绑定了一些参数,所以如果你如果你想给这取决于你的应用程序目前的一些状况不同初始化参数有这个

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

感谢这个!你让我的条条框框,我被困在试图通过QTimer来传递参数,一个非Qt的方式并没有发生在我身上。 然而,纠正我,如果我错了,但我相信有您的代码中的错误 - 它不应该是'functools.partial(计时器触发,myInitParams)'? –

+0

@Deusdies谢谢,你是正确的,这是一个错误! –