[英]How to make ttk.Treeview editable?
這里是一名編程初學者,我受命做有關python中UI的作業。 該任務是一種創建,更新和刪除系統(不包括數據庫)的任務,但它必須具有OOP。 所以我決定在python中使用ttk.Treeview
。 使創建和刪除工作並沒有太大的麻煩,但是當我嘗試執行更新功能時,我迷路了,到目前為止,我沒有嘗試過。
關於我嘗試過的內容,我嘗試將答案應用於如何使ttk.Treeview的行可編輯? 。 但是我無法理解,因為我仍然只是一個初學者,而我所見過的其他所有人,他們都使用數據庫,因此本作業不允許這樣做。
至於我的代碼,它很短:
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
項,而不是可編輯的。 從文檔 :
項目(項目,選項=無,**千瓦)
查詢或修改指定項目的選項。
如果沒有給出選項,則返回包含該選項的選項/值的字典。 如果指定了option,則返回該選項的值。 否則,將選項設置為kw給定的相應值。
因此,對於您的情況,您已經通過tview.selection()[0]
檢索了iid。 使用item
方法修改記錄:
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)
...
你的功能更新的內容row
是不完整的,您檢索使用內容treeview.selection()
之后,你必須使用方法treeview item
來更新內容treeview
。
在更新功能中添加了exception
處理,以提示您選擇要更新的錯誤,否則將輸出錯誤。
添加或更新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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.