【问题标题】:StringVar() with Listbox multiple or extended - lists converting to string具有多个或扩展列表框的 StringVar() - 列表转换为字符串
【发布时间】: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_evaldocs声明如果你调用list变量的.get()方法,你会得到一个格式为"('v0 ', 'v1', ...)",其中每个 vi 是列表框一行的内容。 这可能意味着实际上没有任何内置方法可以实现它,而是必须使用你自己的方法或ast.literal_eval
  • 也不要使用str作为变量名,它是Python内置函数
  • 我的意思是它是一个StringVar(请参阅其名称中的String)所以你期望什么,模式也没有改变,所以使用其他方法也可以,但它只是没有'看起来不太好(还需要考虑额外的'),还可以查看下面的评论,它可以毫不费力地解决这个问题
  • 使用tk.Variable 而不是tk.StringVar
  • @acw1668 - 谢谢,这就像做梦一样。也许写几行作为答案?

标签: python-3.x tkinter


【解决方案1】:

由于StringVar 继承自Variable,并重写了get() 函数,该函数将存储的值转换为string

使用Variable不会有这样的转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多