簡體   English   中英

如何使ttk.Treeview可編輯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM