添付のプログラムは、これらのエラーをスローすることは、GUIスレッドPySide/PyQtGraphアクセスが
QObjectの外ピックスマップを使用することは安全ではありません:: startTimer:タイマーから起動することはできません別のスレッド
import sys
import PySide
import numpy as np
import pyqtgraph as pg
import threading
from PySide import QtGui, QtCore
from PySide.QtGui import *
from PySide.QtCore import *
from ui_mainWindow import Ui_MainWindow
#-------------------------------------------------------------------------------
# Main Window Class
# handle events and updates to the Qt user interface objects
#-------------------------------------------------------------------------------
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.setup_actions()
self.show()
def setup_actions(self):
self.startScopeButton.clicked.connect(self.start_stop_scope)
def start_stop_scope(self):
print("starting scope")
self.scope_display_thread()
def scope_display_thread(self):
threading.Thread(target=self._scope_display_thread).start()
def _scope_display_thread(self):
global data_ch1
data_ch1 = np.random.normal(0, 10, 1000)
self.graphicsView.plot(data_ch1,clear=True)
#-------------------------------------------------------------------------------
# Main Application Start Point
#-------------------------------------------------------------------------------
def main():
app = QApplication(sys.argv)
mainWin = MainWindow()
ret = app.exec_()
sys.exit(ret)
data_ch1 = []
main()
これは私がやろうとしているものの単純化バージョンです。つまり、1つのスレッドが受信し、プロットデータを持っています。フォーラムなどを検索することから、私は根本的に問題があることを知っています。私は "メインのQtイベントスレッド"からプロットを更新する必要があります。しかし、これを達成する方法はわかりません。私のコードのいくつかのシグナルスロット置換は有望に見えましたが、プログラムがクラッシュするだけでした。
私は改革されたC#人です;-) C#またはJavaでは、通常、私は実際にペイントメソッドオーバーライドで描画を行い、新しいデータがあったときにアプリケーションを再描画するように強制します。 PyQtGraph.plot()がすぐにペイントしようとしたようですね??データを非同期的に追加してから、メインスレッドにシーンの再描画を指示することはできますか?
ありがとうございました!
'graphicsView'は何ですか? – eyllanesc