Values Entered In The Dynamic Table (entry Widget Table) Is Not Appended In The List
Target of code is: create 8 row and 'n' column table [n =1,2,3 ...n] and get the inputs entered in table cells. Use it for further calculation Problem : The below code, i have used
Solution 1:
You did not return anything from EntryRow()
function, so columns.append(EntryRow(...))
will append None
to columns
.
I have modified EntryRow()
and extract_data()
functions to use list to store those entries as below:
defEntryRow(left_wl, counter, dx):
# use list to hold the Entry widgets
entries = []
for y in (130, 160, 220, 250, 310, 340, 370):
entry = tk.Entry(left_wl)
entry.place(x=dx, y=y)
entries.append(entry)
# return the list of Entriesreturn entries
defextract_data(columns):
for row in columns:
# pick the format you like more
data_list.append(tuple(x.get() for x in row))
data_dict[row[0].get()] = tuple(x.get() for x in row[1:])
print(data_list)
print(data_dict)
If you still prefer using something like row.entry_box_1.get()
, just modify EntryRow()
function as below:
from types import SimpleNamespace
...
defEntryRow(left_w1, counter, dx):
row = SimpleNamespace()
row.entry_box_1 = tk.Entry(left_wl)
row.entry_box_2 = tk.Entry(left_wl)
row.entry_box_3 = tk.Entry(left_wl)
row.entry_box_4 = tk.Entry(left_wl)
row.entry_box_5 = tk.Entry(left_wl)
row.entry_box_6 = tk.Entry(left_wl)
row.entry_box_7 = tk.Entry(left_wl)
row.entry_box_1.place(x=dx, y=130)
row.entry_box_2.place(x=dx, y=160)
row.entry_box_3.place(x=dx, y=220)
row.entry_box_4.place(x=dx, y=250)
row.entry_box_5.place(x=dx, y=310)
row.entry_box_6.place(x=dx, y=340)
row.entry_box_7.place(x=dx, y=370)
return row
And don't need to change extract_data()
.
Solution 2:
What you are trying to do would lend itself more to using the grid geometry manager instead of the placer geometry manager like you did.
Here's what it could look like:
import tkinter as tk
import tkinter.ttk as ttk
row_requester_window = tk.Tk()
row_requester_window.title('Table entry information')
row_requester_bg = ttk.Frame(row_requester_window, padding='15')
row_requester_bg.grid(column=0, row=0)
row_amount_question = ttk.Label(row_requester_bg, text='Please provide the number of rows needed:')
row_amount_question.grid(column=0, row=0, pady=15)
row_amount_value = tk.IntVar()
row_amount_answer = ttk.Entry(row_requester_bg, textvariable=row_amount_value, width=4)
row_amount_answer.grid(column=1, row=0)
row_amount_needed = 0defselect_nb_rows():
global row_amount_needed
row_amount_needed = row_amount_value.get()
row_requester_window.destroy()
row_amount_decided = ttk.Button(row_requester_bg, text='OK', command=select_nb_rows)
row_amount_decided.grid(column=0, columnspan=2, row=1)
row_requester_window.mainloop()
table_window = tk.Tk()
table_window.title('Enter your data')
table_bg = ttk.Frame(table_window, padding='5')
table_bg.grid(column=0, row=1)
row_label_titles = 'ABCDEFGHIJ'
row_labels = [ttk.Label(table_bg, text=letter, width=3) for letter in row_label_titles]
for (current_row, current_label) inenumerate(row_labels, start=1):
current_label.grid(column=0, row=current_row)
column_titles = [ttk.Label(table_bg, text=f'{number + 1}', width=18) for number inrange(row_amount_needed)]
for (current_column, current_label) inenumerate(column_titles, start=1):
current_label.grid(column=current_column, row=0, pady=5)
entries_values = [
[tk.StringVar() for _ inrange(row_amount_needed)]
for _ inrange(10)
]
entries_rows = [
[ttk.Entry(table_bg, width=18, textvariable=current_variable) for current_variable in current_row]
for current_row in entries_values
]
for (current_row_nb, current_row) inenumerate(entries_rows, start=1):
for (current_column_nb, current_entry) inenumerate(current_row, start=1):
current_entry.grid(column=current_column_nb, row=current_row_nb)
table_window.mainloop()
print('Grid content:')
print(
[
[current_value.get() for current_value in current_row]
for current_row in entries_values
]
)
Post a Comment for "Values Entered In The Dynamic Table (entry Widget Table) Is Not Appended In The List"