为什么 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()

原码:https://bbs.archlinux.org/viewtopic.php?id=242442

看起来 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更新了相关的东西可能会失效