2012-11-02 37 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謝謝,你是正確的,這是一個錯誤! –