Tkinter Combobox列表含空格时显示{}异常问题求助
Tkinter Combobox 显示{}异常的解决办法
你遇到的问题是因为给Combobox的values参数传入了元组列表,Combobox会直接将每个元组转为字符串格式显示,所以会出现带括号、引号的异常样式(比如(7, 'Analize space me'))。
解决方法
根据需求选择以下方案:
1. 仅显示用户名
提取元组中的用户名作为选项值:
import tkinter as tk from tkinter import ttk all_users = [(7, 'Analize space me'), (8, 'Analize space me2'), (9, 'And more')] main_window = tk.Tk() main_window.config(width=300, height=200) main_window.title("Combobox") # 提取元组内的用户名作为选项 combo = ttk.Combobox(values=[user[1] for user in all_users], width=35) combo.place(x=50, y=50) main_window.mainloop()
2. 同时显示ID和用户名
将元组格式化为自定义字符串,避免默认的元组字符串格式:
import tkinter as tk from tkinter import ttk all_users = [(7, 'Analize space me'), (8, 'Analize space me2'), (9, 'And more')] main_window = tk.Tk() main_window.config(width=300, height=200) main_window.title("Combobox") # 格式化ID与用户名的显示文本 combo_values = [f"{user_id} - {username}" for user_id, username in all_users] combo = ttk.Combobox(values=combo_values, width=35) combo.place(x=50, y=50) main_window.mainloop()
3. 获取选中项对应的ID
如果需要获取选中项的原始ID,可以通过映射字典实现:
# 建立用户名到ID的映射 user_id_map = {username: user_id for user_id, username in all_users} # 当需要获取ID时 selected_username = combo.get() selected_id = user_id_map.get(selected_username)
如果用了格式化后的字符串,也可以通过拆分文本提取ID:
selected_text = combo.get() if selected_text: selected_id = int(selected_text.split(" - ")[0])
内容的提问来源于stack exchange,提问作者Julia S
相关产品推荐
相关产品推荐

