【发布时间】:2021-11-01 22:38:35
【问题描述】:
我有一个 tkinter Listbox,我正在使用 StringVar().set() 来设置列表中的值。当我使用StringVar().get() 取回这些值时,它们将被转换为一种尴尬的字符串格式,如下所示:
"('Item1', 'Item2', 'Item3')"
首先避免这种转换的最佳方法是什么,或者如果失败,将字符串转换回初始列表的最佳方法是什么?
您可以使用此 sn-p 代码以最简单的形式重现问题:
import tkinter as tk
root = tk.Tk()
values = tk.StringVar(root)
values.set(['Item1', 'Item2','Item3'])
print(values.get())
它不漂亮,但我想出了这个:
values.get()[2:-2].split("', '")
【问题讨论】:
-
你可以使用
ast.literal_eval和docs声明如果你调用list变量的.get()方法,你会得到一个格式为"('v0 ', 'v1', ...)",其中每个 vi 是列表框一行的内容。 这可能意味着实际上没有任何内置方法可以实现它,而是必须使用你自己的方法或ast.literal_eval -
也不要使用
str作为变量名,它是Python内置函数 -
我的意思是它是一个
StringVar(请参阅其名称中的String)所以你期望什么,模式也没有改变,所以使用其他方法也可以,但它只是没有'看起来不太好(还需要考虑额外的'),还可以查看下面的评论,它可以毫不费力地解决这个问题 -
使用
tk.Variable而不是tk.StringVar。 -
@acw1668 - 谢谢,这就像做梦一样。也许写几行作为答案?
标签: python-3.x tkinter