Форум сайта python.su
0
Всем доброго времени.
На PyQT состряпал форму, к компьютеру по serial подключен arduino
подсобите как запустить функцию print_serial при поступлении данных в serial порт?
я как понимаю нужно опрос порта реализовать в потоке но вот как это сделать?
import sys # sys нужен для передачи argv в QApplication from PyQt5 import QtWidgets import design # Это наш конвертированный файл дизайна import serial #для работы с сериал соединением ser=serial.Serial("/dev/ttyACM0",9600) #change ACM number as found from ls /dev/tty/ACM* ser.baudrate=9600 write_ser="Привет от PI!" class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow): def __init__(self): # Это здесь нужно для доступа к переменным, методам # и т.д. в файле design.py super().__init__() self.setupUi(self) # Это нужно для инициализации нашего дизайна self.pushButton.clicked.connect(self.write_arduino) # Выполнить функцию write_arduino # при нажатии кнопки def print_serial(self): """печать в listwidget""" read_ser=ser.readline() self.listWidget.addItem(read_ser) def write_arduino(self): """функция обработки передачи данных в порт""" ser.write(write_ser.encode()) #Передача в порт с кодировкой encode self.listWidget.addItem(write_ser) def main(): app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication window = ExampleApp() # Создаём объект класса ExampleApp window.show() # Показываем окно app.exec_() # и запускаем приложение if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем main() # то запускаем функцию main()
Отредактировано seregka174 (Март 17, 2019 08:51:09)
Офлайн
0
Сделал вот так все гуд в консоль работает а в listwidget нет, ошибка
import sys # sys нужен для передачи argv в QApplication from PyQt5 import QtWidgets import design # Это наш конвертированный файл дизайна import threading import time import serial #для работы с сериал соединением ser=serial.Serial("/dev/ttyACM0",9600) #change ACM number as found from ls /dev/tty/ACM* ser.baudrate=9600 write_ser="Привет от PI!" class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow): def __init__(self): # Это здесь нужно для доступа к переменным, методам # и т.д. в файле design.py super().__init__() self.setupUi(self) # Это нужно для инициализации нашего дизайна self.pushButton.clicked.connect(self.write_arduino) # Выполнить функцию write_arduino при нажатии кнопки def write_arduino(self): """функция обработки передачи данных в порт""" ser.write(write_ser.encode()) #Передача в порт с кодировкой encode self.listWidget.addItem("Отправленно: "+write_ser) def print_serial(self): """печать в listwidget то что поступило на serial""" while 1: read_ser=ser.readline() if(read_ser!=""): print(read_ser)#вывод в консоль полученной строки self.listWidget.addItem("Пришло: "+read_ser) p1 = threading.Thread(target=print_serial, name="t1", args=["1"]) p1.start() def main(): app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication window = ExampleApp() # Создаём объект класса ExampleApp window.show() # Показываем окно app.exec_() # и запускаем приложение if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем main() # то запускаем функцию main()
Офлайн
294
seregka174а что это у вас за аргумент ‘1’? Ваш метод “print_serial(self)” имеет только один аргумент, это инстанс класса( он же self,p1 = threading.Thread(target=print_serial, name="t1", args=["1"])
class... p1 = threading.Thread(target=print_serial, name="t1", args=["1"]) p1.start()
[code python][/code]
Отредактировано PEHDOM (Март 17, 2019 18:39:02)
Офлайн
186
seregka174 Сначала сделай так что бы оно нормально отрабатывало, а потом потоки прикручивай. Иначе ты запутаешься.
P.S. Из патока менять что-то в GUI нельзя.
Офлайн
0
RodegastТак в том то и дело все работает отлично, просто не выводит в listwidget c ошибкой:
seregka174 Сначала сделай так что бы оно нормально отрабатывало, а потом потоки прикручивай. Иначе ты запутаешься.P.S. Из патока менять что-то в GUI нельзя.
Офлайн
294
seregka174чтото подобное вы и прошлый раз писали, может стоит наверстать пробелы в образовании?
У меня знаний совсем маловато я ели понимаю что такое класс, метод, атрибут я только учусь )
[code python][/code]
Отредактировано PEHDOM (Март 18, 2019 09:41:48)
Офлайн
186
> Так в том то и дело все работает отлично
Ты серьёзно так думаешь? Например объект ser у тебя является глобальной переменной и нигде не закрывается. Метод write_arduino отправляет только строго определённый текст, а не текст вводимый пользователем. Вывод почему то идёт в listWidget, а не в QPlainText.
> просто не выводит в listwidget c ошибкой
Вот пример того как оно должно работать: http://python.su/forum/topic/24662/?page=2#post-130903
Офлайн