Есть ли способ написать строку как последовательный в Tkinter - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь отправить строку с RaspberryPi 3B + через USB-кабель на Arduino Uno. Я получаю значения в строке из графического интерфейса, используя Tkinter. Когда я нажимаю кнопку Tkinter, я хочу, чтобы RasPi отправлял значения.

def dieseFarbe():

    r = Sliderred.get ()
    g = Slidergreen.get ()
    b = Sliderblue.get ()
    w = Sliderwhite.get ()
    f = Sliderfader.get()

    value_string = "{},{},{},{}".format(r, g, b, w)

    #ser.write(value_string)

Графический интерфейс работает отлично.

print(value_string)

работает без проблем.

ser.write(value_string)

вызывает следующие ошибки:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
    return self.func(*args)
  File "/home/pi/python-GUI/gui.py", line 22, in dieseFarbe
ser.write(value_string)
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 518, in write
d = to_bytes(data)
File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes
raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: '1,1,1,1'

1 Ответ

0 голосов
/ 28 июня 2019

Ошибка говорит вам точно, что вам нужно сделать: закодировать строку в байтах.

Вы можете отправлять байты только через последовательное соединение, но str в python3 - это строка "символов";то есть, если ваш графический интерфейс отправлял символы юникода, последовательная библиотека не знала бы, как их кодировать в байты.

Это можно исправить, просто набрав:

ser.write(value_string.encode())

или encode("ascii")или encode("utf-8"), в зависимости от того, что подходит

...