#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: »