Python 3。TTK。如何更改特定单元格的值?

Python 3。TTK。如何更改特定单元格的值?,python,tkinter,ttk,Python,Tkinter,Ttk,我对tkinter/ttk有一些问题 所以,我知道如何获取Treeview.focus,但如何更改此表中特定单元格的值?有什么建议吗 import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() tview = ttk.Treeview(root) tview["columns"] = ("SLOT_1","SLOT_2") tview.column("SLOT_1", width=100 ) tview.column("SLOT

我对
tkinter/ttk
有一些问题

所以,我知道如何获取Treeview.focus,但如何更改此表中特定单元格的值?有什么建议吗

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

tview = ttk.Treeview(root)
tview["columns"] = ("SLOT_1","SLOT_2")
tview.column("SLOT_1", width=100 )
tview.column("SLOT_2", width=100)

tview.heading("#0",text="Column 0",anchor="w")
tview.heading("SLOT_1", text="Column 1")
tview.heading("SLOT_2", text="Column 2")

def add_item():
    tview.insert("","end",values=("","bar"))

def edit_item():
    focused = tview.focus()
    print(tview.item(focused))

tview.pack()

add_item = tk.Button(root,text="Add item",command=add_item)
add_item.pack(expand=True,fill='both')

edit_item = tk.Button(root,text="Edit item",command=edit_item)
edit_item.pack(expand=True,fill='both')

root.mainloop()

我正在使用
python3.6
tkinter/ttk

我添加了一个线程,这样程序在等待用户输入编辑时不会挂起。您可能需要添加一个或多个文本框来输入编辑

import tkinter as tk
import tkinter.ttk as ttk
import threading

root = tk.Tk()

tview = ttk.Treeview(root)
tview["columns"] = ("SLOT_1", "SLOT_2")
tview.column("SLOT_1", width=100)
tview.column("SLOT_2", width=100)

tview.heading("#0", text="Column 0", anchor="w")
tview.heading("SLOT_1", text="Column 1")
tview.heading("SLOT_2", text="Column 2")

def test_program_thread():
    thread = threading.Thread(None, edit_item, None, (), {})
    thread.start()

def add_item():
    tview.insert("", "end", values=("", "bar"))


def edit_item():
    focused = tview.focus()
    x = input('Enter a Value you want to change')
    tview.insert("", str(focused)[1:], values=("", str(x)))
    tview.delete(focused)

tview.pack()

add_item = tk.Button(root, text="Add item", command=add_item)
add_item.pack(expand=True, fill='both')

edit_item_button = tk.Button(root, text="Edit item", command=test_program_thread)
edit_item_button.pack(expand=True, fill='both')

root.mainloop()
继续发展

使用单个.item更新行,而不是使用.insert添加新行,然后使用.delete删除旧行,这将有助于处理包含9行以上的树视图,并将更新的行保持在树视图中的相同位置

修改的完整代码:


您的解决方案有两个问题
tview.insert(“,str(focused)[1:”,values=(“”,str(x)))
获取一个错误
\u tkinter.TclError:预期的整数,但得到了“009”
当我将其更改为
tview.insert(“,int(focused)[1:”,values=(“”,str(x))
时,它可以工作,但最多只能有9行。第10行已经获取了一个值“I00A”,这将导致错误
ValueError:以10为基数的int()的文本无效:“00A”
tview = ttk.Treeview(root)
tview["columns"] = ("SLOT_1", "SLOT_2")
tview.column("SLOT_1", width=100)
tview.column("SLOT_2", width=100)

tview.heading("#0", text="Column 0", anchor="w")
tview.heading("SLOT_1", text="Column 1")
tview.heading("SLOT_2", text="Column 2")

def test_program_thread():
    thread = threading.Thread(None, edit_item, None, (), {})
    thread.start()

def add_item():
    tview.insert("", "end", values=("", "bar"))


def edit_item():
    focused = tview.focus()
    x = input('Enter a Value you want to change')
    tview.item(focused, values=("", str(x)))

tview.pack()

add_item = tk.Button(root, text="Add item", command=add_item)
add_item.pack(expand=True, fill='both')

edit_item_button = tk.Button(root, text="Edit item", command=test_program_thread)
edit_item_button.pack(expand=True, fill='both')

root.mainloop()