CTkComboBox仅显示单个字符求助:串口列表无法正常加载
解决CTkComboBox串口路径显示为单个字符的问题
问题现象
Python控制台能正确打印串口设备路径字符串(如"/dev/ttyS4","/dev/ttyS0","/dev/ttyACM0"),但将其传入customtkinter的CTkComboBox时,下拉选项没有显示完整的串口路径,而是逐个显示单个字符(比如/、d、e等),预期应该显示完整的/dev/ttyS4、/dev/ttyS0、/dev/ttyACM0作为下拉选项。
问题原因
CTkComboBox的values参数要求传入字符串列表,但原代码把所有串口路径拼接成了一个单一的字符串。当字符串被传给values时,Python会将其视为字符序列,自动拆分每个字符作为独立选项,所以才会出现单个字符的错误显示。
修正代码
直接用列表收集串口路径,而非拼接成字符串:
from tkinter import * import customtkinter import serial.tools.list_ports customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme("dark-blue") root = customtkinter.CTk() root.title('Combo Box Ports') root.geometry('700x450') # 用列表存储串口路径,符合CTkComboBox参数要求 port_list = [] ports = serial.tools.list_ports.comports() for p in ports: if p.device: # 空字符串直接跳过,简化判断逻辑 port_list.append(p.device) print(port_list) # 打印列表,每个元素是完整的串口路径 my_combo = customtkinter.CTkComboBox(root, values=port_list) my_combo.pack(pady=20) root.mainloop() # 添加主循环,保证窗口正常显示
优化说明
- 取消了冗余的字符串拼接操作,改用列表存储串口路径,完全适配CTkComboBox的参数要求
- 简化空字符串判断逻辑,
if p.device:即可过滤空设备路径 - 补充了原代码遗漏的
root.mainloop(),否则窗口无法正常启动
内容的提问来源于stack exchange,提问作者wyzarddoc
相关产品推荐
相关产品推荐

