串行字节输入到 tkinter 组合框值

问题描述 投票:0回答:1

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)) - 只是循环不走运?

python-3.x tkinter serial-port
1个回答
0
投票

从串口读取

后需要检查
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)
© www.soinside.com 2019 - 2024. All rights reserved.