виджет Tkinter Treeview вставка данных

Это мой пример кода. Я хочу, чтобы элементы, введенные в запись, были вставлены в treeview при нажатии кнопки enter. Im новый для python и tkinter, и нет много tuts о treeview.

class PurchaseEntry(tk.Frame):
    def __init__(self, parent, controller):
       tk.Frame.__init__(self, parent)
       self.controller = controller
       PurchaseEntry.configure(self, bg='white')

       label = ttk.Label(self, text='Purchase Entry', font=LARGE_FONT2)
       label.grid(row=0, columnspan=3, sticky='w')

       purchase_entry = ttk.Label(self, text='Purchase Entry:')
       purchase_entry.grid(row=1, column=0)

       self.entry_val = tk.StringVar()
       self.entry_1 = ttk.Entry(self, width=100, textvariable=self.entry_val)
       self.entry_1.grid(row=1, column=2, columnspan=2, sticky='w')
       self.entry_1.focus()

       self.entry_btn = ttk.Button(self,text='Enter', command=self.insert_value)
       self.entry_btn.grid(row=1, column=4, columnspan=2, sticky='w')

       self.chat1 = ttk.Treeview(self)

       chat1 = ttk.Treeview( self, height=28, columns=('dose', 'date   modified'), selectmode="extended")
       chat1.heading('#0', text='item', anchor=tk.CENTER)
       chat1.heading('#1', text='dose', anchor=tk.CENTER)
       chat1.heading('#2', text='date modified', anchor=tk.CENTER)
       chat1.column('#1', stretch=tk.YES, minwidth=50, width=100)
       chat1.column('#2', stretch=tk.YES, minwidth=50, width=120)
       chat1.column('#0', stretch=tk.YES, minwidth=50, width=400)
       chat1.grid(row=2, column=2, columnspan=4, sticky='nsew')

    def insert_value(self):
       value = self.entry_val.get()
       # Inserts data written in the entry box to the treeview widget when Enter button is pressed.
       # Clears the Entry box, ready for another data entry.
       self.entry_1.delete(0, 'end')
       self.chat1.insert('WHAT SHOULD I GIVE AS AN ARGUMENT?')

что я должен передать в качестве аргумента? Или treeview правильный виджет для этого или кто-то может предложить виджет, подходящий для этой проблемы? спасибо

1 ответов


вас, похоже, интересует только то, как вставлять данные, которые пользователь вводит в Tkinter.Entry() виджеты в ttk.Treeview() после Tkinter.Button() клик.

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

вот как выглядит демо-версия приложения:

enter image description here

поэтому я установил счетчик self.i назвать предметы. Но вы можете добавить метку и запись для этой цели вместо этого вы вставляете имена элементов аналогично другим Tkinter.Entry() записи.

метод ввода-это:

def insert_data(self):
    """
    Insertion method.
    """
    self.treeview.insert('', 'end', text="Item_"+str(self.i), values=(self.dose_entry.get()+" mg", self.modified_entry.get()))
    # Increment counter
    self.i = self.i + 1

может быть основным трюком здесь является получение данных, которые пользователь вводит с помощью get() метод, который вещь представлена self.dose_entry.get() и self.dose_modified.get() действия.

это сделано, теперь вам нужно привязать этот метод к кнопке, которую нужно нажать, чтобы вызвать действие вставки с помощью command вариант:

self.submit_button = Tkinter.Button(self.parent, text = "Insert", command = self.insert_data

полной программе:

'''
Created on Mar 21, 2016

@author: Bill Begueradj
'''
import Tkinter
import ttk

class Begueradj(Tkinter.Frame):
    '''
    classdocs
    '''  
    def __init__(self, parent):
        '''
        Constructor
        '''
        Tkinter.Frame.__init__(self, parent)
        self.parent=parent
        self.initialize_user_interface()

    def initialize_user_interface(self):
        """Draw a user interface allowing the user to type
        items and insert them into the treeview
        """
        self.parent.title("Canvas Test")       
        self.parent.grid_rowconfigure(0,weight=1)
        self.parent.grid_columnconfigure(0,weight=1)
        self.parent.config(background="lavender")


        # Define the different GUI widgets
        self.dose_label = Tkinter.Label(self.parent, text = "Dose:")
        self.dose_entry = Tkinter.Entry(self.parent)
        self.dose_label.grid(row = 0, column = 0, sticky = Tkinter.W)
        self.dose_entry.grid(row = 0, column = 1)

        self.modified_label = Tkinter.Label(self.parent, text = "Date Modified:")
        self.modified_entry = Tkinter.Entry(self.parent)
        self.modified_label.grid(row = 1, column = 0, sticky = Tkinter.W)
        self.modified_entry.grid(row = 1, column = 1)

        self.submit_button = Tkinter.Button(self.parent, text = "Insert", command = self.insert_data)
        self.submit_button.grid(row = 2, column = 1, sticky = Tkinter.W)
        self.exit_button = Tkinter.Button(self.parent, text = "Exit", command = self.parent.quit)
        self.exit_button.grid(row = 0, column = 3)

        # Set the treeview
        self.tree = ttk.Treeview( self.parent, columns=('Dose', 'Modification date'))
        self.tree.heading('#0', text='Item')
        self.tree.heading('#1', text='Dose')
        self.tree.heading('#2', text='Modification Date')
        self.tree.column('#1', stretch=Tkinter.YES)
        self.tree.column('#2', stretch=Tkinter.YES)
        self.tree.column('#0', stretch=Tkinter.YES)
        self.tree.grid(row=4, columnspan=4, sticky='nsew')
        self.treeview = self.tree
        # Initialize the counter
        self.i = 0


    def insert_data(self):
        """
        Insertion method.
        """
        self.treeview.insert('', 'end', text="Item_"+str(self.i), values=(self.dose_entry.get()+" mg", self.modified_entry.get()))
        # Increment counter
        self.i = self.i + 1         

def main():
    root=Tkinter.Tk()
    d=Begueradj(root)
    root.mainloop()

if __name__=="__main__":
    main()

Примечание:

я закодировал это в Python 2.7, поэтому, если вы используете Python 3.x измените то, что вам нужно изменить соответственно (в основном импорт и везде, где вы видите Tkinter в tkinter)