python第二个程序——(需要学习很多)我试图将字节格式的串行端口信息读入字符串,然后使用该字符串填充 tkinter 组合框的“值”,然后将其用于选择 def 类型用于将所选信息输出到同一串行端口的串行输出功能。只需要在程序启动时读取串口数据,但会多次将选择写回串口。我计划使用 cb.bind('<>',comboclick) -> 的变体来触发 def 函数来发送串行数据。
import tkinter as tk
from tkinter import ttk
import serial
d2 = []
data = []
def get_serial():
global d2
global data
ser = serial.Serial('/dev/ttyACM0', 115200)
ser.write(b'$$\n')
while True:
#data = ser.readline().decode('utf-8').rstrip()
if data == 'ok':
break
data = ser.readline().decode('utf-8').replace('\r\n',',')
#print(data)
d2 = data
print(data)
root = tk.Tk()
root.title('Great Britain Basketball')
root.geometry('800x449+300+130')
root.configure(bg='#072462')
#def variable and store based on selection
def comboclick(event):
global select_sheet # Setting select_sheet to global, so it can be modified
select_sheet = cb.get()
#I am setting here the same value of cb.current(), so if the user doesn't change it, you still #get an output.
select_sheet = 'Mon'
get_serial() # +++++++++++++ doesn't work ++ goes into loop? +++++++++
#create combobox
#cb = ttk.Combobox(root, value=('Mon', 'Tues', 'Wed', 'Thurs'))
cb = ttk.Combobox(root, value=d2) #-- This should populate combobox values ???
cb.current(0)
cb.bind('<<ComboboxSelected>>', comboclick)
cb.pack()
#set close window button
button_close = tk.Button(root, width=35, text='Close Programme', command=root.quit,
fg='#C51E42', bg='#B4B5B4', borderwidth=1).pack()
root.mainloop()
print(select_sheet)
第一次问问题所以在以后的请求中会做得更好
我尝试了所有类型的字符串格式化、字符串转换、字节转换,但我遗漏了一些东西(可能很简单)。上面的代码是之前回答的问题的修改版本。串行输出尚未编写。 按照另一篇文章中的建议尝试了 cb = ttk.Combobox(root, config(value=d2)) - 只是循环不走运?
从串口读取
后需要检查
data
的值。另外,最好在创建 GUI 之前获取这些值。
以下是修改后的代码:
import tkinter as tk
from tkinter import ttk
import serial
COMPORT = "/dev/ttyACM0"
BAUDRATE = 115200
def get_serial():
values = []
with serial.Serial(COMPORT, BAUDRATE) as ser:
ser.write(b"$$\n")
while True:
data = ser.readline().decode("utf-8").strip()
if data == "ok":
break
values.append(data) # save the data into values
return values
# get the values before creating the GUI
print("getting values from serial port ...")
values = get_serial()
print(values)
# create the GUI
root = tk.Tk()
root.title("Great Britain Basketball")
root.geometry("800x449+300+130")
root.configure(bg="#072462")
def comboclick(event):
global select_sheet
select_sheet = cb.get()
# send the selected sheet via the serial port
with serial.Serial(COMPORT, BAUDRATE) as ser:
ser.write(f"{select_sheet}\n".encode("utf-8"))
cb = ttk.Combobox(root, values=values)
cb.bind("<<ComboboxSelected>>", comboclick)
cb.pack()
tk.Button(root, width=35, text="Close Programme", command=root.destroy,
fg="#C51E42", bg="#B4B5B4", bd=1).pack()
root.mainloop()
print(select_sheet)