Python 如何使ttk.Treeview可编辑?
作为这里的编程初学者,我的任务是做一个关于python中UI的家庭作业。该任务是一种创建、更新和删除系统(不包括数据库),但它必须具有OOP。所以我决定在python中使用Python 如何使ttk.Treeview可编辑?,python,tkinter,treeview,ttk,Python,Tkinter,Treeview,Ttk,作为这里的编程初学者,我的任务是做一个关于python中UI的家庭作业。该任务是一种创建、更新和删除系统(不包括数据库),但它必须具有OOP。所以我决定在python中使用ttk.Treeview。让create和delete正常工作并没有太大困难,但当我尝试执行更新功能时,我失败了,到目前为止,我尝试过的功能都不起作用 关于我试过的那些,我试着把答案应用到它们身上。但我不能理解它,因为我还只是一个初学者 我见过的每一个都使用数据库,这是本作业中不允许的 至于我的代码,它相当短: from tk
ttk.Treeview
。让create和delete正常工作并没有太大困难,但当我尝试执行更新功能时,我失败了,到目前为止,我尝试过的功能都不起作用
关于我试过的那些,我试着把答案应用到它们身上。但我不能理解它,因为我还只是一个初学者
我见过的每一个都使用数据库,这是本作业中不允许的
至于我的代码,它相当短:
from tkinter import messagebox, ttk
employees = []
class Employees:
def __init__(self, n, d, p, r):
self.n = n
self.d = d
self.p = p
self.r = r
def add():
n = e1.get()
d = e2.get()
p = e3.get()
r = e4.get()
employees.append(Employees(n, d, p, r))
tview.insert('', "end", text=n, values=(d, p, r))
messagebox.showinfo("Add", "Successfully added")
def delete():
selected_item = tview.selection()[0]
tview.delete(selected_item)
def updatetreeview():
# here where I am lost at I don't know what to do
selected_item = tview.selection()[0]
master = Tk()
Label(master, text='Name').grid(row=0)
Label(master, text='Department').grid(row=1)
Label(master, text='Position').grid(row=2)
Label(master, text='Rate').grid(row=3)
tview = ttk.Treeview(master, columns=('Name', 'Position', 'Department','Rate'))
tview.grid(row=7, column=0, columnspan=10)
tview.heading('#0', text="Name")
tview.heading('#1', text="Department")
tview.heading('#2', text="Position")
tview.heading('#3', text="Rate")
e1 = Entry(master, width="30")
e2 = Entry(master, width="30")
e3 = Entry(master, width="30")
e4 = Entry(master, width="30")
e1.grid(row=0, column=1, pady=10)
e2.grid(row=1, column=1, pady=10)
e3.grid(row=2, column=1, pady=10)
e4.grid(row=3, column=1, pady=10)
b1 = Button(master, text="Add", width="25", command=add)
b1.grid(row=4, column=1, pady=10)
b2 = Button(master, text="Update", width="25")
b2.grid(row=5, column=1, pady=10)
b2 = Button(master, text="Delete", width="25", command=delete)
b2.grid(row=6, column=1, pady=10)
mainloop()
至于我的预期结果,我希望按下按钮后,表中选定的行将被更新。我认为您要查找的单词应该是“更新”一个
Treeview
项,而不是“可编辑”。发件人:
项目(项目,选项=无,**千瓦)
查询或修改指定项的选项
如果未给出任何选项,则返回带有该项的选项/值的dict。如果指定了选项,则该选项的值为
返回。否则,将选项设置为相应的值,如下所示:
由千瓦给出
因此,对于您的情况,您已经通过tview.selection()[0]
检索到了iid。使用项
方法修改记录:
def updatetreeview():
selected_item = tview.selection()[0]
tview.item(selected_item,text=e1.get(), values=(e2.get(),e3.get(),e4.get()))
...
b2 = Button(master, text="Update", width="25",command=updatetreeview)
...
更新
行中内容的功能不完整,您正在使用treeview.selection()
方法检索内容,然后您必须使用treeview item
更新treeview
中的内容
from tkinter import messagebox, ttk
from tkinter import *
employees = []
class Employees:
def __init__(self, n, d, p, r):
self.n = n
self.d = d
self.p = p
self.r = r
def add():
n = e1.get()
d = e2.get()
p = e3.get()
r = e4.get()
employees.append(Employees(n, d, p, r))
tview.insert('', "end", text=n, values=(d, p, r))
messagebox.showinfo("Add", "Successfully added")
e1.delete(0, END)
e2.delete(0, END)
e3.delete(0, END)
e4.delete(0, END)
def delete():
try:
selected_item = tview.selection()[0]
tview.delete(selected_item)
except IndexError:
pass
def updatetreeview():
try:
selected_item = tview.selection()[0]
tview.item(selected_item, text=e1.get(), values=(e2.get(), e3.get(), e4.get()))
print("updated")
e1.delete(0, END)
e2.delete(0, END)
e3.delete(0, END)
e4.delete(0, END)
except IndexError:
messagebox.showerror("Error","Select the row you want to update")
master = Tk()
Label(master, text='Name').grid(row=0)
Label(master, text='Department').grid(row=1)
Label(master, text='Position').grid(row=2)
Label(master, text='Rate').grid(row=3)
tview = ttk.Treeview(master, columns=('Name', 'Position', 'Department','Rate'))
tview.grid(row=7, column=0, columnspan=10)
tview.heading('#0', text="Name")
tview.heading('#1', text="Department")
tview.heading('#2', text="Position")
tview.heading('#3', text="Rate")
e1 = Entry(master, width="30")
e2 = Entry(master, width="30")
e3 = Entry(master, width="30")
e4 = Entry(master, width="30")
e1.grid(row=0, column=1, pady=10)
e2.grid(row=1, column=1, pady=10)
e3.grid(row=2, column=1, pady=10)
e4.grid(row=3, column=1, pady=10)
b1 = Button(master, text="Add", width="25", command=add)
b1.grid(row=4, column=1, pady=10)
b2 = Button(master, text="Update", width="25", command=updatetreeview)
b2.grid(row=5, column=1, pady=10)
b2 = Button(master, text="Delete", width="25", command=delete)
b2.grid(row=6, column=1, pady=10)
mainloop()
已将异常处理添加到更新功能中,以提示您选择要更新的错误,否则将输出错误
在添加或更新treeview
后,还必须清除该条目
from tkinter import messagebox, ttk
from tkinter import *
employees = []
class Employees:
def __init__(self, n, d, p, r):
self.n = n
self.d = d
self.p = p
self.r = r
def add():
n = e1.get()
d = e2.get()
p = e3.get()
r = e4.get()
employees.append(Employees(n, d, p, r))
tview.insert('', "end", text=n, values=(d, p, r))
messagebox.showinfo("Add", "Successfully added")
e1.delete(0, END)
e2.delete(0, END)
e3.delete(0, END)
e4.delete(0, END)
def delete():
try:
selected_item = tview.selection()[0]
tview.delete(selected_item)
except IndexError:
pass
def updatetreeview():
try:
selected_item = tview.selection()[0]
tview.item(selected_item, text=e1.get(), values=(e2.get(), e3.get(), e4.get()))
print("updated")
e1.delete(0, END)
e2.delete(0, END)
e3.delete(0, END)
e4.delete(0, END)
except IndexError:
messagebox.showerror("Error","Select the row you want to update")
master = Tk()
Label(master, text='Name').grid(row=0)
Label(master, text='Department').grid(row=1)
Label(master, text='Position').grid(row=2)
Label(master, text='Rate').grid(row=3)
tview = ttk.Treeview(master, columns=('Name', 'Position', 'Department','Rate'))
tview.grid(row=7, column=0, columnspan=10)
tview.heading('#0', text="Name")
tview.heading('#1', text="Department")
tview.heading('#2', text="Position")
tview.heading('#3', text="Rate")
e1 = Entry(master, width="30")
e2 = Entry(master, width="30")
e3 = Entry(master, width="30")
e4 = Entry(master, width="30")
e1.grid(row=0, column=1, pady=10)
e2.grid(row=1, column=1, pady=10)
e3.grid(row=2, column=1, pady=10)
e4.grid(row=3, column=1, pady=10)
b1 = Button(master, text="Add", width="25", command=add)
b1.grid(row=4, column=1, pady=10)
b2 = Button(master, text="Update", width="25", command=updatetreeview)
b2.grid(row=5, column=1, pady=10)
b2 = Button(master, text="Delete", width="25", command=delete)
b2.grid(row=6, column=1, pady=10)
mainloop()
我看不出这个问题与你链接的问题有什么不同。为什么我们要把它打开,而不是像复制品一样关闭?哇,太谢谢你了!!它就像一个符咒,我在那里真的遇到了麻烦,你真是天赐之物,谢谢你帮助这个noob。谢谢你补充的信息,现在我可以向我的老师解释清楚了。