Python как экспортировать данные из виджета ввода в Treeview

#python-3.x #tkinter #tkinter-entry

#python-3.x #tkinter #tkinter-запись

Вопрос:

Я пытаюсь создать listbox с помощью Treeview виджета. Список успешно создан, но я не понимаю, как экспортировать данные из виджета ввода в listbox, и мне нужно удалить кнопку для содержимого listbox. программа успешно работает.

 from tkinter import ttk
import tkinter as tk


def update_sum(first_number_tk, second_number_tk, sum_tk) :
# Sets the sum of values of e1 and e2 as val of e3
   try:
    sum_tk.set((float(first_number_tk.get().replace(' ', ''))   float(second_number_tk.get().replace(' ', ''))))
   except :
    pass

   root.after(10, update_sum, first_number_tk, second_number_tk, sum_tk) # reschedule the event
   return

root = tk.Tk()
root.geometry('1000x600')

e1_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e1's val.
e2_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e2's val.
sum_tk = tk.StringVar(root) # Initializes a text variable of tk to use to set e3's val.

# Entries
e1 = tk.Entry(root, textvariable = e1_tk)
e1.grid(row=1,column=1)
e2 = tk.Entry(root, textvariable = e2_tk)
e2.grid(row=1,column=2)
e3 = tk.Entry(root, textvariable = sum_tk)
e3.grid(row=1,column=3)

e4=tk.Label(root,text="SL")
e4.grid(row=1,column=0)

e3_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e1's val.
e4_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e2's val.
sum2_tk = tk.StringVar(root) # Initializes a text variable of tk to use to set e3's val.


# Entries
e5 = tk.Entry(root, textvariable = e3_tk)
e5.grid(row=2,column=1)
e6 = tk.Entry(root, textvariable = e4_tk)
e6.grid(row=2,column=2)
e7 = tk.Entry(root, textvariable = sum2_tk)
e7.grid(row=2,column=3)

e8=tk.Label(root,text="DR")
e8.grid(row=2,column=0)

cols = ('name', 'No1', 'No2', 'total sum')
listBox = ttk.Treeview(root, columns=cols, show='headings')

for col in cols:
    listBox.heading(col, text=col)
    listBox.grid(row=1, column=0, columnspan=2)
    listBox.place(x=10, y=300)


# Will update the sum every second 10 ms = 0.01 second it takes ms as arg.
root.after(10, update_sum, e1_tk, e2_tk, sum_tk)
root.after(10, update_sum, e3_tk, e4_tk, sum2_tk)

root.mainloop()
  

Заранее спасибо..

Ответ №1:

Вы можете просто добавить две новые кнопки и две новые функции, например:

 b = tk.Button(root,text='Update Listbox',command=update)
b.grid(row=3)

b1 = tk.Button(root, text='Delete Items', command=delete)
b1.grid(row=4)
  

и тогда update() может быть что-то вроде:

 def update():
    listBox.insert('','end',value=('SOME NAME', float(e1.get()),float(e2.get()),float(e3.get())))
    listBox.insert('', 'end', value=('SOME NAME', float(e5.get()), float(e6.get()), float(e7.get())))
  

и затем delete() должно быть что-то вроде:

 def delete():
    selected_item = listBox.selection()[0]  # get selected item
    listBox.delete(selected_item)
  

Для delete() правильной работы вам нужно щелкнуть по элементу, который вы хотите удалить, а затем нажать на кнопку удалить

value Аргумент — это единственное место, где вам нужно будет внести необходимые изменения.

Надеюсь, это развеяло ваши сомнения, дайте мне знать, если возникнут еще какие-либо ошибки или сомнения.

Приветствия

Комментарии:

1. value не является допустимым аргументом для insert .

2. О, прошу прощения. Когда я вижу «ListBox» Я предполагаю, что это Listbox . Теперь я вижу, что виджет не является Listbox , это Treeview .

3. Элемент SL вставлен, но элемент DR не будет импортирован. и мне также нужно удалить кнопку..

4. эта функция ListBox.insert(«, ‘end’, value=(‘НЕКОТОРОЕ ИМЯ’, float(e5.get()), float(e6.get()), float(e7.get()))) не работает.

5. ошибка ListBox.insert(«,’end’,value=(‘SL’, float(e1.get()), float(e2.get()),float(e3.get()))) Ошибка ValueError: не удалось преобразовать строку в float: »