먼저 길이에 대해 사과드립니다. 나는 나의 문제를 가능한 한 잘 설명하고 싶다. 필자는 Python을 처음 접했고 PyQt4에 임베디드 된 PyQtGraph를 사용하여 플로팅 애플 리케이션을 만들려고했다. 며칠 전 내 plotting problem에 대한 멋진 답변을 얻었고 다음 단계는 같은 PyQt4의 CentralWidget에 simoultaneously 플로팅하는 두 개의 PyQtGraphs 플롯 위젯을 갖는 것입니다. 설명 된 링크에서와 같은 방식으로 두 플롯 모두 제대로 작동하지만 GUI가 응답하지 않게됩니다. 이 문제를 극복하기 위해 QThread을 사용하려고합니다. 그 때문에 다른 클래스에서 플로팅 기능을 사용해야합니다. 하지만 내 변수 덤비는하고, 어떻게 볼 수 없습니다 : 나에게 Plots.plotter에서 오류를 제공PyQt4에서 PyQtGraph로 라이브 플로팅하기 # 2
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'
를 MainWindow를 클래스에 나는 '버튼을 대체합니다. 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