Вставить данные в виджет ttk.treeview в определенный столбец - PullRequest
0 голосов
/ 16 января 2019

Я хотел бы вставить данные в определенный столбец моего виджета ttk treeview. Вход только для пользователей - это сканер, поэтому мне нужно проанализировать каждый код, чтобы определить, в какой столбец он входит. Прямо сейчас, функция 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')

В идеале я хотел бы иметь возможность вставить в пустое дерево любой столбец или в некоторых случаях захватить то, что выбрано, а затем изменить значение на основе ввода.

1 Ответ

0 голосов
/ 16 января 2019

Вам нужно будет вставить пустое в столбцы, которые вы не хотите заполнять.

И вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...