まず、長さは申し訳ありません。私は問題をできるだけ良く説明したい。私はPythonには新しく、PyQt4に埋め込まれたPyQtGraphを使ってプロットアプリを作ろうとしています。数日前、私はplotting problemに本当に素敵な答えを得ました。私の次のステップは、同じPyQt4のCentralWidgetにsimoultaneouslyプロットする2つのPyQtGraphsプロットウィジェットを持つことです。説明されているリンクと同じアプローチで、両方のプロットは正常に動作しますが、GUIは応答しなくなります。これを克服するために、QThreadを使用することを目指しています。そのために、私は異なるクラスでプロット関数を用意する必要があります。しかし、私は私の変数をいじっていて、どのように見ることができない。私はPlots.plotterでエラーが発生しますPyQt4#2でのPyQtGraphによるライブプロット
from PyQt4 import QtCore, QtGui
import pyqtgraph as pg
import random
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
self.login_widget = LoginWidget(self)
self.login_widget.button.clicked.connect(Plots.plotter)
self.central_widget.addWidget(self.login_widget)
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Start Plotting')
layout.addWidget(self.button)
self.plot = pg.PlotWidget()
layout.addWidget(self.plot)
self.setLayout(layout)
class Plots(MainWindow):
def print(self):
print('hello World')
def plotter(self):
self.data = [0]
self.curve = self.login_widget.plot.getPlotItem().plot()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater)
self.timer.start(0)
def updater(self):
self.data.append(self.data[-1]+0.2*(0.5-random.random()))
self.curve.setData(self.data)
if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()
:
self.data = [0]
AttributeError: 'bool' object has no attribute 'data'
をメイン・ウィンドウクラスで、私は「ボタンを置き換えた場合。 connect '引数をPlots.printと比較すると、正常に動作します。だから、MainWindowでLoginWidgetオブジェクトを作ってから、PlotsがMainWindowから継承し、同じLoginWidgetオブジェクトを再度呼び出すということに何か問題があることが分かります。
私は、父親(MainWindow)が子どものメソッド(Plots)にアクセスしない場合の提案された解決策を試しました。しかし、プロットから、場合、私は父親が子供のメソッドにアクセスべきではない相続で
import sys
from PyQt4 import QtCore, QtGui
import pyqtgraph as pg
import random
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Start Plotting')
layout.addWidget(self.button)
self.plot = pg.PlotWidget()
layout.addWidget(self.plot)
self.setLayout(layout)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
self.login_widget = LoginWidget(self)
self.central_widget.addWidget(self.login_widget)
class Plots(MainWindow):
def __init__(self, parent=None):
super(Plots, self).__init__(parent=parent)
self.login_widget.button.clicked.connect(MyThread.plotter)
class MyThread(MainWindow):
def __init__(self, parent=None):
super(Aname, self).__init__(parent=parent)
def print(self):
print('hello World')
def plotter(self):
self.data = [0]
self.curve = self.login_widget.plot.getPlotItem().plot()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater)
self.timer.start(0)
def updater(self):
self.data.append(self.data[-1]+0.2*(0.5-random.random()))
self.curve.setData(self.data)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = Plots()
w.show()
sys.exit(app.exec_())
あなたのコードは私に別のエラーが発生します。 'self.login_widget.button.clicked.connect(Plots.plotter)' AttributeError: 'function'オブジェクトに '__pyqtSignature__'属性がありません – Trilarion
self.login_widgetのPlots.printでPlots.plotterを置き換えると、同じエラーが発生します。 button.clicked.connect(Plots.plotter)? – Ivy