Я немного почистил ваш код и протестировал. Никакой коррупции на моем конце. Дайте мне знать, если это поможет.
1-й мы сохраняем все имена меток в списке. Затем, перебирая этот список, мы используем ndex и значение для создания виджетов входа и метки. Мы используем ndex для управления нашей сеткой. place()
не подходит для размещения виджетов, потому что, если вам нужно внести какие-либо изменения, вам может потребоваться переписать когда-либо одно место, чтобы компенсировать это. Затем просто обновите значения ячеек, указав правильный индекс в списке записей. Здесь также не было необходимости в холсте. Похоже, все, для чего он использовался, был цветным.
Пример:
import tkinter as tk
from datetime import datetime
from openpyxl import load_workbook
ht = 500
wt = 500
root = tk.Tk()
root.geometry('{}x{}'.format(ht, wt))
root.config(bg='#3363F9')
root.rowconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(2, weight=1)
var = tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
sheet.cell(row=n, column=3).value = entry_list[1].get()
sheet.cell(row=n, column=4).value = entry_list[5].get()
sheet.cell(row=n, column=5).value = entry_list[0].get()
sheet.cell(row=n, column=6).value = entry_list[7].get()
sheet.cell(row=n, column=7).value = entry_list[3].get()
sheet.cell(row=n, column=8).value = entry_list[4].get()
sheet.cell(row=n, column=9).value = entry_list[2].get()
sheet.cell(row=n, column=11).value = entry_list[6].get()
wb.save('file.xlsx')
frame = tk.Frame(root, bg='#3363F9')
frame.grid(row=1, column=1)
label_list = ["math", "physics", "arabic", "English", "German", "Chemistry", "transportation", "food"]
entry_list = []
for ndex, label in enumerate(label_list):
tk.Label(frame, text=label, bg='#3363F9', fg='white').grid(row=ndex+2, column=0, sticky='e')
entry_list.append(tk.Entry(frame))
entry_list[-1].grid(row=ndex+2, column=1)
d = tk.Entry(frame, textvariable=var)
d.grid(row=0, column=2)
tk.Button(frame, text="get", command=call).grid(row=1, column=2)
root.mainloop()
Тем не менее, мы можем уменьшить это, если вы согласитесь изменить некоторые столбцы в вашем файле Excel. Если вы хотите сопоставить столбцы с метками по порядку, вы можете сделать это вместо этого:
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
for i in range(8):
sheet.cell(row=n, column=i+3).value = entry_list[i].get()
wb.save('file.xlsx')