Я пытаюсь создать pyqtgraph, который обновляется в реальном времени на основе значений, которые он получает от pyserial-соединения. В настоящее время у меня есть два файла: один, который считывает данные из pyserial-соединения и выдает сигнал, когда два значения изменились, и второй файл, который интерпретирует сигнал и отображает два измененных значения. По какой-то причине значения, считанные из pyserial-соединения, не передаются во второй файл. Нажатие кнопки start QPushButton запускает поток. Я сослался на этот пост, но не могу понять, почему есть проблема с сигналом, поэтому любые советы будут оценены. Спасибо заранее!
Вот первый файл:
class PortCommunication(QThread):
# Define signal for thread communication
data_changed = pyqtSignal(float, float)
def run(self):
try:
# Define port settings
with serial.Serial(
port = "COM4",
baudrate = 9600,
bytesize = 8,
parity = serial.PARITY_NONE,
stopbits = 1,
timeout = 1,
) as self.ser:
count = 0
# test only 10 iterations
while count < 10:
count += 1
self.ser.write(b"ADC0\r\n")
# Get device output (should be ['#,#,#'])
output = self.ser.read(size=20)
decoded_output = (output.decode('utf-8'))
# Turn the decoded_output from string to list
final_list = decoded_output.strip().split(',')
# Torque is the first number in the ['#', '#', '#']
torque = float(final_list[0])
speed = float(final_list[1])
# Emit torque and speed signal
#print(torque, speed)
self.data_changed.emit(torque, speed)
time.sleep(3)
except serial.serialutil.SerialException:
print("Couldn't open port.")
Вот второй файл:
class MainWidget(QtGui.QWidget):
def __init__ (self):
super(MainWidget, self).__init__()
self.initializeSpace()
def initializeSpace(self):
# Create and define buttons that will control the thread
self.start = QtGui.QPushButton("Start")
self.start.clicked.connect(self.startEvent)
self.stop = QtGui.QPushButton("Stop")
# Create Layout
self.layout = QtGui.QGridLayout()
# Add widgets to layout
self.layout.addWidget(self.start, 0, 0)
self.layout.addWidget(self.stop, 1, 0)
# Set layout
self.setLayout(self.layout)
def startEvent(self):
# Create a thread
self.thread = PortCommunication()
self.thread.start()
# Connect signals & slots
self.thread.data_changed.connect(self.display_data)
def display_data(self, torque, speed):
print(torque, speed)
print(x_list, y_list, torque, speed)
? - person eyllanesc   schedule 22.07.2021update_plot
по какой-то причине не обрабатывается. ничего не возвращаю. Это потому, что нить непрерывна? - person Gillian Grace   schedule 22.07.2021data_changed = pyqtSignal(float, float)
2) добавитьself.data_changed.emit(torque, speed)
и 3) добавитьself.thread.data_changed.connect(self.update_plot)
и 4) удалить все оtorque_changed
иspeed_changed
- person eyllanesc   schedule 23.07.2021QMessageBox.information(self, "Started!", "The thread has started.")
подupdate_plot
и подключаю его кstartEvent
всякий раз, когда я нажимаю кнопку запуска, ничего не происходит. У вас есть идеи, что может быть причиной этого? - person Gillian Grace   schedule 23.07.2021self.thread.start()
и получил ошибкуNameError("name 'signalStatus' is not defined")
. - person Gillian Grace   schedule 23.07.2021