如何将包含空格的字符串添加到 Tkinter Treeview 列
How to add a string that contains whitespace to a Tkinter Treeview column
我使用 tree.insert 方法将数据插入树视图小部件。在 values 选项下,我指定了从哪里获取数据的字符串变量。如果字符串包含空格,则该字符串会被分解成更小的字符串,然后放入列表中。如何将数据添加到树视图列中而不将其截断到第一个空格?
谢谢。
import tkinter as tk
from tkinter import ttk
app = tk.Tk()
tree = ttk.Treeview(app)
tree.grid(row=0, column=0)
tree.config(columns=('Value1'), selectmode='browse')
tree.column('#0', width=150, minwidth=10, stretch=tk.YES)
tree.column('Value1', width=80, minwidth=10, stretch=tk.YES)
tree.heading('#0', text='Name', anchor=tk.W)
tree.heading('Value1', text='Value', anchor=tk.W)
data = [['John', '123456'], ['Mary', '123 456'], ['Edward', 'abcdef'], ['Lisa', 'ab cd ef']]
for item in data:
print(item[1], type(item[1]))
tree.insert("", 'end', item[0], text=item[0], values=item[1])
print(tree.item(item[0])['values'], type(tree.item(item[0])['values']))
app.mainloop()
values
期望一个可迭代对象,因此当您将 string
传递给它时,它往往会做一些奇怪的事情。在代码中修复它的最简单方法是将其作为元组传递:
tree.insert("", 'end', item[0], text=item[0], values=(item[1],))
这不是什么大任务,只需在 white-space 前加一个反斜杠即可,例如 :-
data = [['John', '123456'], ['Mary', '123\ 456'], ['Edward', 'abcdef'], ['Lisa', 'ab\ cd\ ef']]
它将在您的 GUI 中显示 white-space,因为“123\456”将被视为类型 'list' 中的单个元素。
在这里给出的两个答案中,我倾向于不同意设置
values=item[1]
到 values=(item[1])
因为我仍然对 Treeview 围绕空格拆分有问题。
我尝试了转义解决方案并且效果很好。如果可以的话,我会更进一步,将您的 values=(item[1])
更改为 values=(item[1].replace(" ", "\ "))
这样您的行将显示为::
tree.insert("", 'end', item[0], text=item[0], values=(item[1].replace(" ", "\ "))
...作为包罗万象
我使用 tree.insert 方法将数据插入树视图小部件。在 values 选项下,我指定了从哪里获取数据的字符串变量。如果字符串包含空格,则该字符串会被分解成更小的字符串,然后放入列表中。如何将数据添加到树视图列中而不将其截断到第一个空格?
谢谢。
import tkinter as tk
from tkinter import ttk
app = tk.Tk()
tree = ttk.Treeview(app)
tree.grid(row=0, column=0)
tree.config(columns=('Value1'), selectmode='browse')
tree.column('#0', width=150, minwidth=10, stretch=tk.YES)
tree.column('Value1', width=80, minwidth=10, stretch=tk.YES)
tree.heading('#0', text='Name', anchor=tk.W)
tree.heading('Value1', text='Value', anchor=tk.W)
data = [['John', '123456'], ['Mary', '123 456'], ['Edward', 'abcdef'], ['Lisa', 'ab cd ef']]
for item in data:
print(item[1], type(item[1]))
tree.insert("", 'end', item[0], text=item[0], values=item[1])
print(tree.item(item[0])['values'], type(tree.item(item[0])['values']))
app.mainloop()
values
期望一个可迭代对象,因此当您将 string
传递给它时,它往往会做一些奇怪的事情。在代码中修复它的最简单方法是将其作为元组传递:
tree.insert("", 'end', item[0], text=item[0], values=(item[1],))
这不是什么大任务,只需在 white-space 前加一个反斜杠即可,例如 :-
data = [['John', '123456'], ['Mary', '123\ 456'], ['Edward', 'abcdef'], ['Lisa', 'ab\ cd\ ef']]
它将在您的 GUI 中显示 white-space,因为“123\456”将被视为类型 'list' 中的单个元素。
在这里给出的两个答案中,我倾向于不同意设置
values=item[1]
到 values=(item[1])
因为我仍然对 Treeview 围绕空格拆分有问题。
我尝试了转义解决方案并且效果很好。如果可以的话,我会更进一步,将您的 values=(item[1])
更改为 values=(item[1].replace(" ", "\ "))
这样您的行将显示为::
tree.insert("", 'end', item[0], text=item[0], values=(item[1].replace(" ", "\ "))
...作为包罗万象