Вставка виджета tkinter Treeview

Это мой пример кода. Я хочу, чтобы элементы, введенные в запись, были вставлены в древовидное изображение при нажатии кнопки ввода. Я новичок в python и tkinter, и в 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?') 

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

  • Почему мой обработчик click ttk.Treeview возвращает неправильный элемент в tree.focus ()?
  • Как отключить ручное изменение размера столбца дерева Tkinter?
  • номера сортировки python ttk treeview
  • Сортировка столбца дерева Tk
  • Odoo / OpenERP: скрытие кнопки создания из дерева
  • Python Tkinter: прокрутка холста с помощью MouseWheel
  • ttk treeview: альтернативные цвета строк
  • One Solution collect form web for “Вставка виджета tkinter Treeview”

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

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

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

    введите описание изображения здесь

    Поэтому я установил счетчик 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)

    Python - лучший язык программирования в мире.