我正在使用MySql存储过程get_list填充ttk.Combobox
my_number = tk.StringVar()
cb=ttk.Combobox(top_frame,width=25,textvariable=my_number)
cb['values']=db.get_list()
cb.grid(row=1,column=4)它工作得很好,除了结果由{}括起来。
结果:{Smith, John}
我想要的:Smith, John
如何去掉开头和结尾的{}
发布于 2020-06-09 04:30:26
问题是数据库查询返回一个行列表,其中每一行都是一个只有一列的列表。values选项需要一个字符串列表。
因此,简单的解决方案是使用列表理解将每行转换为字符串。像这样的东西应该是有效的:
values = [row[0] for row in db.get_list()]
cb['values'] = values因为我不能运行你的代码,所以我不能肯定。无论如何,问题的根源在于您传递的是一个列表(或元组)列表,而tkinter需要一个字符串列表。
因为tkinter在内部对列表使用了大括号,所以它添加了大括号来保留您传递的数据的性质。您可以将从db.get_list()返回的数据转换为字符串列表。
发布于 2020-06-10 02:16:14
Bryan,我插入了你建议的两行代码,但我仍然得到由{}包围的值。许多我不理解,但我相信,永远不会确切知道,MySql过程返回的是一个字符串。下面是MySQL代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_list`()
BEGIN
SELECT concat(last_name,', ', first_name) as last_first
FROM volunteers
ORDER BY
last_first;
END
my_number = tk.StringVar()
cb = ttk.Combobox(top_frame, width=25, textvariable=my_number)
values = [row[0] for row in db.get_list()]
cb['values'] = db.get_list()
cb.grid(row=1, column=4)感谢您的坚持。
https://stackoverflow.com/questions/62266340
复制相似问题