Получение значений из полей ввода данных Python
При нажатии кнопки "+" происходит автоматическое добавление строки с ячейками для ввода данных. Пользователь добавляет их столько, сколько считает нужным. Никак не удается получить эти значения и произвести расчет при нажатии кнопки "Calc". Получаю ошибку о том, что значение переменной с методом get не получено.
from tkinter import ttk
from tkinter.scrolledtext import ScrolledText
import math
window = Tk()
window.title ('ECD')
window.geometry ('1880x870+30+30')
row_counter = 2
def row_add():
global row_counter
label_text = str(row_counter-1) + '.'
Label(window, text=label_text, background=bg1, font='Arial 8 bold').grid(row=row_counter,
column=0, padx=0, pady=0, sticky='w'+'e'+'n'+'s')
Label(window, text='Casing ID', background=bg1).grid(row=row_counter, column=1, padx=0,
pady=0, sticky='w')
options_casing_id = ["mm", "in"]
casing_id_units = StringVar(value=options_casing_id[0])
casing_id_combobox = ttk.Combobox (window, textvariable = casing_id_units,
values=options_casing_id, width=4)
casing_id_combobox.grid(row=row_counter, column=2, padx=0, pady=0, sticky='e')
casing_id_entry = ttk.Entry(window, width=10)
casing_id_entry.grid(row=row_counter, column=3, padx=5, pady=5, sticky='w'+'e'+'n'+'s')
row_counter += 1
def data_get():
global casing_id_entry
casing_id = float(casing_id_entry.get())
ecd = casing_id * 1000
st.insert(END, 'ECD = ' + str(round(ecd, 2)) + ' ppg\n')
#Создаю виджеты
Button(window, command=row_add, width=3, text='+', font='Arial 8 bold').grid(row=1, column=0, padx=5, pady=5, sticky='w'+'e'+'n'+'s')
Button(window, width=3, text='Calc', font='Arial 8 bold', command=data_get).grid(row=2, column=0, padx=5, pady=5, sticky='w'+'e'+'n'+'s')
#Вывод результатов
st = ScrolledText(window, width=260, height=10, bd=1.5, font = 'Arial 10')
st.grid(row=6, padx=5, pady=5, sticky='w'+'e'+'n'+'s')
window.mainloop() ```
Ответы (1 шт):
Автор решения: Stanislav Nikulin
→ Ссылка
Если кто-то столкнется с подобной проблемой, я решил ее так:
#Функция добавления строк с ячейками ввода данных создает списки полей Entry
def row_add():
global row_counter
label_text = str(row_counter-2) + '.'
Label(up_frame, text=label_text, background=bg1, font='Arial 8 bold').grid(row=row_counter, column=0, padx=0, pady=0, sticky='w'+'e'+'n'+'s')
Label(up_frame, text='Drill Bit Diameter', background=bg1).grid(row=row_counter, column=1, padx=0, pady=0, sticky='w')
bit_id_entry = ttk.Entry(up_frame, width=10)
bit_id_entry.grid(row=row_counter, column=2, padx=5, pady=5, sticky='w'+'e'+'n'+'s')
row_counter += 1
bit_id_list.append(bit_id_entry)
return
#Затем создаю списки для значений из ячеек
def calc():
big = [] #один большой для всех параметров
bit_id_values=[] #и маленькие под конкретные наборы ячеек
def data_get():
for bit_id_entry in bit_id_list:
bit_id_values.append(float(bit_id_entry.get())/25.4)
return (bit_id_values)
bit_id_values = data_get()
for i in range(len(bit_id_values)):
big.append([bit_id_values[i]])
#Произвожу вычисления с использованием списка списков
for j in big:
bit_id_values_a = j[0]
Va = (0.7854 * float(bit_id_values_a)*(math.pow(0.2207, 2))*1000
#вывожу результаты в поле Scrolltext
st.insert(END, 'Well volume ' + str(round(Va, 2)) + '\n')