为什么 tkinter 项目中的数字值是整数而不是字符串,即使我将这些值作为字符串类型插入?
Why are the digit values in the tkinter items integers and not strings even when I inserted those values as type string?
标题提到了这个问题,我需要使用Tkinter TreeView关键字values下的值item 如:tree.item(v)['values'][0]
,v 是我在树视图上的选择。该方法 returns 一个整数,如果该值之前有零,它就会忽略它们。
这是我的意思的一个例子:我需要用黄色标记的值,因为它是 (001) 而不是 (1)。
打印这个“tree.item(v)['values'][0]”会说它的值为 1,但树视图显示实际值 001。如何获得实际值 (001)?谢谢你.
这是代码:
from tkinter import *
from tkinter import ttk
window = Tk()
window.title('Treeview')
window.configure(background='Yellow Green')
ttk.Label(window, text='There must be colors at some rows:',
font=('DejaVu Sans', 11, 'bold'), background= 'yellow green').grid(row=0, column=0)
tree = ttk.Treeview(window, columns=('name', 'surname', 'telephone'))
tree.grid(row=1, column=0)
tree.heading('#0', text='Α/Α')
tree.heading('name', text='Name')
tree.heading('surname', text='Surname')
tree.heading('telephone', text='Telephone')
tree.insert('', 0, text='0001', values=("001",2230310,"Hello"))
c = tree.get_children()
print(tree.get_children())
for v in c:
print(tree.item(v))
print(tree.item(v)['text'])
print(tree.item(v)['values'][0], type(tree.item(v)['values'][0]))
application = (window)
window.mainloop()
看起来 tkinter.ttk.Treeview 总是尽可能将 values
中的所有项目转换为整数。
两个相关问题,
- Issue 1
- Issue 2
在 ttk 代码中,无法通过设置任何选项来停止转换。
所以在这里破解代码,它可能对你有用。在导入 ttk
之后和使用 ttk.Treeview
.
之前放置代码
from tkinter import *
from tkinter import ttk
def _convert_stringval(value):
"""Converts a value to, hopefully, a more appropriate Python object."""
if hasattr(value, 'typename'):
value = str(value)
try:
value = int(value)
except (ValueError, TypeError):
pass
return value
ttk._convert_stringval = _convert_stringval
注意:以后如果tkinter更新了相关的东西可能会失效
标题提到了这个问题,我需要使用Tkinter TreeView关键字values下的值item 如:tree.item(v)['values'][0]
,v 是我在树视图上的选择。该方法 returns 一个整数,如果该值之前有零,它就会忽略它们。
这是我的意思的一个例子:我需要用黄色标记的值,因为它是 (001) 而不是 (1)。 打印这个“tree.item(v)['values'][0]”会说它的值为 1,但树视图显示实际值 001。如何获得实际值 (001)?谢谢你.
这是代码:
from tkinter import *
from tkinter import ttk
window = Tk()
window.title('Treeview')
window.configure(background='Yellow Green')
ttk.Label(window, text='There must be colors at some rows:',
font=('DejaVu Sans', 11, 'bold'), background= 'yellow green').grid(row=0, column=0)
tree = ttk.Treeview(window, columns=('name', 'surname', 'telephone'))
tree.grid(row=1, column=0)
tree.heading('#0', text='Α/Α')
tree.heading('name', text='Name')
tree.heading('surname', text='Surname')
tree.heading('telephone', text='Telephone')
tree.insert('', 0, text='0001', values=("001",2230310,"Hello"))
c = tree.get_children()
print(tree.get_children())
for v in c:
print(tree.item(v))
print(tree.item(v)['text'])
print(tree.item(v)['values'][0], type(tree.item(v)['values'][0]))
application = (window)
window.mainloop()
看起来 tkinter.ttk.Treeview 总是尽可能将 values
中的所有项目转换为整数。
两个相关问题,
- Issue 1
- Issue 2
在 ttk 代码中,无法通过设置任何选项来停止转换。
所以在这里破解代码,它可能对你有用。在导入 ttk
之后和使用 ttk.Treeview
.
from tkinter import *
from tkinter import ttk
def _convert_stringval(value):
"""Converts a value to, hopefully, a more appropriate Python object."""
if hasattr(value, 'typename'):
value = str(value)
try:
value = int(value)
except (ValueError, TypeError):
pass
return value
ttk._convert_stringval = _convert_stringval
注意:以后如果tkinter更新了相关的东西可能会失效