Qtベースの複雑なPythonアプリケーションを使用しています。これはPySide.QtCore.QTimer.singleShot(int、slot)タイマーを使用してスレッド内のスロットの実行を遅延させます。このタイマーの仕組みについては混乱しています。PySide.QtCore.QTimer.singleShotがタイムアウトメソッドを呼び出す方法
ここにMWEがあります。この例では、QThreadをサブクラス化してrun()を再実装する方法を使用します。
import PySide
import time
class SubClassThread(PySide.QtCore.QThread):
def run(self):
print('called SubClassThread.run()')
self.delayed_print()
def delayed_print(self):
print('called SubClassThread.delayed_print()')
PySide.QtCore.QTimer.singleShot(1000, self.print_things)
time.sleep(2)
print('end of delayed_print()')
def print_things(self):
print('called print_things')
私はこれをテストするために使用していたコード(test.py
それを呼び出す):
import sys
import time
import PySide
from timertester import SubClassThread
print('Test: QThread subclassing')
app = PySide.QtCore.QCoreApplication([])
sct = SubClassThread()
sct.finished.connect(app.exit)
sct.start()
sys.exit(app.exec_())
python test.py
の出力:
Test: QThread subclassing
called SubClassThread.run()
called SubClassThread.delayed_print()
end of delayed_print()
を私はtimertester.pyと呼ばれるファイルに次のように置きます
興味があるのは、QTimer.singleShotに渡された呼び出し可能コードが決して呼び出されないようだということです(出力にはcalled print_things()
はありません!)あなたはこれを流すことができます。私はQtフレームワークの単純な要素が欠けていると感じています。私と一緒に耐えてください - 私はこれに対する答えを探して時間を費やしました。
この返信は正しい軌道に乗るので、私はそれに小切手を渡しています。私は自分の答えを追加して、人々が最終的にそのトリックをしたコードを見ることができるようにします。 – lensonp