插入 tkinter 组合框的字符串格式

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

python 控制台正确打印字符串 {"/dev/ttyS4","/dev/ttyS0","/dev/ttyACM0" } 以插入组合框选择中,但运行时组合框仅打印一个字符而不是每个选择,如下所示上面

from tkinter import *
import customtkinter

import serial.tools.list_ports

customtkinter.set_appearance_mode('dark')
customtkinter.set_default_color_theme("dark-blue")
#root = Tk()
root = customtkinter.CTk()
root.title('Combo Box Ports')
root.geometry('700x450')

get_sel_val = ''
#print(type(get_sel_val))

ports = serial.tools.list_ports.comports()
for p in ports:
#    print(p.device)
#print(len(ports), 'ports found')    
    if (p.device) != (''):
        get_sel_val = get_sel_val + '"' + (p.device) + '",'
        #print(p)
        #print(p.device)
        #print (type(p.device))
print(get_sel_val)
          
my_combo = customtkinter.CTkComboBox(root, values = get_sel_val)
my_combo.pack(pady=20)    

....

I was expecting tkinter combobox selectios to be
    /dev/ttyS4
    /dev/ttyS0
    /dev/ttyACM0
not --> / d / e v 
python-3.x tkinter serial-port customtkinter
1个回答
0
投票

您需要传递一个可迭代对象(例如:列表、元组)作为

values
的值,并且您正在传递一个字符串。由于 Tkinter 将迭代这些值来创建下拉列表,因此您将把每个字符视为一个项目,因为这就是 python 迭代字符串的方式。

您应该构建一个列表而不是字符串,它可能看起来像这样:

get_sel_val = []
for p in ports:
    if (p.device) != (''):
        get_sel_val.append(p.device)
print(", ".join(get_sel_val))
my_combo = customtkinter.CTkComboBox(root, values = get_sel_val)
© www.soinside.com 2019 - 2024. All rights reserved.