将数据插入 ttk.treeview 小部件到特定列

Insert data into ttk.treeview widget to specific column

我想将数据插入到我的 ttk 树视图小部件的特定列中。用户只输入一个扫描器,所以我必须解析每个代码以确定它进入哪一列。现在,parseData() 函数在按下 Enter 时运行,所以我想处理那里的插入。

我曾尝试使用 treeview.set(item, column, new_value),但在插入空白行时它会崩溃。

class MainGUI:
    def __init__(self, master):
        self.master = master
        self.data_view = ttk.Treeview(master)
        self.data_view['columns'] = ["Date", "Item 1", "Item 2", "Item 3", "Item 4", "Source", "Destination", "Cart #",]
        self.data_view['show'] = 'headings'
        self.data_view.heading("Date", text="Date")
        self.data_view.heading("Item 1", text="Item 1")
        self.data_view.heading("Item 2", text="Item 2")
        self.data_view.heading("Item 3", text="Item 3")
        self.data_view.heading("Item 4", text="Item 4")
        self.data_view.heading("Source", text="Source")
        self.data_view.heading("Destination", text="Destination")
        self.data_view.heading("Cart #", text="Cart #")
        self.data_view.pack()

        self.scan_entry = ttk.Entry(master)
        self.scan_entry.pack()
        self.scan_entry.bind('<Return>', self.parseEntry)
        self.scan_entry.focus()

        self.close_button = tk.Button(master, text="Close", command=self.adminLogout, width=15, height=5)
        self.close_button.pack(anchor='se')

    def parseEntry(self,event):
        #INSERT self.scan_entry.get() into #ITEM 1 column, not date volumn
        #If contains certain characters, maybe insert into Source or Destination
        self.scan_entry.delete(0,'end')

理想情况下,我希望能够将空白树插入到任何列,或者在某些情况下抓取所选内容,然后根据输入更改值。

您必须在不想填写的列中插入空行。

并且您可以使用 in 来检查您在 self.scan_entry.get() 中查找的字符:

from tkinter import *
import tkinter.ttk as ttk
class MainGUI:
    def __init__(self, master):
        self.master = master
        self.data_view = ttk.Treeview(master)
        self.data_view['columns'] = ["Date", "Item 1", "Item 2", "Item 3", "Item 4", "Source", "Destination", "Cart #",]
        self.data_view['show'] = 'headings'
        self.data_view.heading("Date", text="Date")
        self.data_view.heading("Item 1", text="Item 1")
        self.data_view.heading("Item 2", text="Item 2")
        self.data_view.heading("Item 3", text="Item 3")
        self.data_view.heading("Item 4", text="Item 4")
        self.data_view.heading("Source", text="Source")
        self.data_view.heading("Destination", text="Destination")
        self.data_view.heading("Cart #", text="Cart #")
        self.data_view.pack()
        self.scan_entry = ttk.Entry(master)
        self.scan_entry.pack()
        self.scan_entry.bind('<Return>', self.parseEntry)
        self.scan_entry.focus()

        self.close_button = ttk.Button(master, text="Close", command=lambda:print('want to close app'))
        self.close_button.pack(anchor='se')

    def parseEntry(self,event):
        #self.scan_entry.delete(0,'end')
        self.data_view.insert('',END,values=('',self.scan_entry.get(),'','','','','',''))
        #If contains certain characters, maybe insert into Source or Destination       
        if 'a' in self.scan_entry.get():
            self.data_view.insert('',END,values=('','','','','',self.scan_entry.get(),self.scan_entry.get(),''))


if __name__=='__main__':
    master=Tk()
    maingui=MainGUI(master)
    master.mainloop()