为什么 tkinter 项目中的数字值是整数而不是字符串,即使我将这些值作为字符串类型插入?

Ald*_*llo 1 python treeview user-interface tkinter python-3.x

标题指的是这个问题,我需要使用方法项获取Tkinter TreeView的关键字下的值,如下所示:,v是我在树视图上的选择。该方法返回一个整数,如果该值之前有零,则它会忽略它们。tree.item(v)[\'values\'][0]

\n

这是我的意思的一个例子:我需要完全按照原样用黄色标记的值 (001) 而不是 (1)。\n打印此“tree.item(v)[\'values\'][0]”将说值是1,但树形视图显示真实值001。我怎样才能获得真实值(001)?谢谢。

\n

我需要完全按照原样标记为黄色的值 (001) 而不是 (1)

\n

这是代码:

\n
from tkinter import *\nfrom tkinter import ttk\n\nwindow = Tk()\nwindow.title(\'Treeview\')\nwindow.configure(background=\'Yellow Green\')\n\nttk.Label(window, text=\'There must be colors at some rows:\', \n    font=(\'DejaVu Sans\', 11, \'bold\'), background= \'yellow green\').grid(row=0, column=0)\ntree = ttk.Treeview(window, columns=(\'name\', \'surname\', \'telephone\'))\ntree.grid(row=1, column=0)\ntree.heading(\'#0\', text=\'\xce\x91/\xce\x91\')\ntree.heading(\'name\', text=\'Name\')\ntree.heading(\'surname\', text=\'Surname\')\ntree.heading(\'telephone\', text=\'Telephone\')\ntree.insert(\'\', 0, text=\'0001\', values=("001",2230310,"Hello"))\nc = tree.get_children()\nprint(tree.get_children())\nfor v in c:\n    print(tree.item(v))\n    print(tree.item(v)[\'text\'])\n    print(tree.item(v)[\'values\'][0], type(tree.item(v)[\'values\'][0]))\napplication = (window)\nwindow.mainloop()\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Jas*_*ang 6

如果可能的话,tkinter.ttk.Treeview 看起来总是将所有项目转换values为整数。

两个相关问题,

从 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
Run Code Online (Sandbox Code Playgroud)

注意:如果tkinter以后更新相关的东西,可能会不起作用。