2

私は Python と PySide (PyQt の代替) を使用しています。バックグラウンドで実行されるアプリケーションがあり、QTimer を使用していくつかのタスクの実行をスケジュールしたいと考えています。

ただし、プログラムで1つのメソッドを呼び出すにはQTimerが必要ですが、このメソッドには、メソッドが何をすべきかを正確に指定する「初期化パラメーター」が必要です。

QTimer をサブクラス化しtimeout、メソッドまたはstartメソッドのいずれかをオーバーライドする必要があると考えるのは正しいですか? もしそうなら、どれをどうやってそれについてやりますか?私は既存のメソッドをオーバーライドした経験がほとんどなく、Google で調べても多くの結果が得られませんでした (理解できない C++ の結果がいくつかありました)。私は何かをすることができました(たとえば、start()メソッドをオーバーライドしましたが、元の開始メソッドのコードは(当然のことながら)実行されず、そのコードがどうあるべきかわかりません.

それとも何か他の方法がありますか?

4

1 に答える 1

6

ただし、プログラムで1つのメソッドを呼び出すには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...

アプリケーションの現在の状態に応じて異なるinit パラメーターを指定する場合は、その特定の項目がいつ変更されるかに基づいて、カスタム シグナル/スロットを使用することをお勧めします。または、その「現在の」状態が initParams を他の場所で変更しているものを維持します。

于 2012-11-02T20:00:31.050 に答える