这是我第一次使用pyserial。我用pysimplegui做了一个简单的图形用户界面,现在我想把滑块上的数据写到串行监视器上。我该怎么做呢?
import PySimpleGUI as sg
import serial
font = ("Courier New", 11)
sg.theme("DarkBlue3")
sg.set_options(font=font)
ser = serial.Serial("COM6")
ser.flushInput()
layout = [
[sg.Text("X"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_X')],
[sg.Text("Y"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_Y')],
[sg.Text("Z"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_Z')],
[sg.Push(), sg.Button('Exit')],
]
window = sg.Window("Controller", layout, finalize=True)
window['SLIDER_X'].bind('<ButtonRelease-1>', ' Release')
window['SLIDER_Y'].bind('<ButtonRelease-1>', ' Release')
window['SLIDER_Z'].bind('<ButtonRelease-1>', ' Release')
while True:
event, values = window.read()
if event in (sg.WINDOW_CLOSED, 'Exit'):
break
elif event == 'SLIDER_X Release':
print("X Value:", values["SLIDER_X"])
elif event == 'SLIDER_Y Release':
print("Y Value:", values["SLIDER_Y"])
elif event == 'SLIDER_Z Release':
print("Z Value:", values["SLIDER_Z"])
data = values["SLIDER_X"], values["SLIDER_Y"], values["SLIDER_Z"]
print("String:", data)
window.close()
ser.close()
如果我就这么做
ser.write(data)
出现错误:
TypeError: 'float' object cannot be interpreted as an integer
我只想把数据写到串行端口,这样我就可以用Arduino读取它了。
1条答案
按热度按时间fjnneemd1#
这里的代码有两个问题:
1.变量data的类型为元组,而不是数字。
1.如TypeError所示,元组的每个成员都是浮点数。
您需要一次向ser.write传递一个值,并且需要将滑块小部件返回的浮点数转换为整数,如下所示: