У вашей программы были ошибки при выполнении. Попробуйте следующий код. Дата рождения должна быть в формате ГГГГ-ММ-ДД.
from openpyxl import *
from tkinter import *
from datetime import datetime
from dateutil.relativedelta import relativedelta
wb = load_workbook('C:\\Users\\Me\\Desktop\\Script\\try.xlsx')
sheet = wb.active
datetimeFormat = '%Y-%m-%d'
class Mainframe(Frame):
# Mainframe contains the widgets
## global inv_cnt
def __init__(self,master,*args,**kwargs):
global msg, inv_cnt
excel()
inv_cnt=1
# *args packs positional arguments into tuple args
# **kwargs packs keyword arguments into dict kwargs
# initialise base class
Frame.__init__(self,master,*args,**kwargs)
# in this case the * an ** operators unpack the parameters
name = Label(self, text="Name:", font=('times', 15),anchor='e').place(relx=0.05, rely=0.05, height=15, width=100)
birthdate = Label(self, text="Birth Date:", font=('times', 15),anchor='e').place(relx=0.05, rely=0.15, height=15, width=100)
gender = Label(self, text="Gender:", font=('times', 15),anchor='e').place(relx=0.05, rely=0.25, height=15, width=100)
mobile = Label(self, text="Mobile:", font=('times', 15),anchor='e').place(relx=0.05, rely=0.35, height=15, width=100)
self.name = StringVar(self)
self.name.set('')
self.name=Entry(self,textvariable = self.name, width=280, bg='WHITE')
self.name.place(relx=0.2, rely=0.05, height=25, width=100)
self.birthdate = StringVar(self)
self.birthdate.set('')
self.birthdate=Entry(self,textvariable = self.birthdate, width=280, bg='WHITE')
self.birthdate.place(relx=0.2, rely=0.15, height=25, width=100)
self.gender = StringVar(self)
self.gender.set('')
self.gender=Entry(self,textvariable = self.gender, width=280, bg='WHITE')
self.gender.place(relx=0.2, rely=0.25, height=25, width=100)
self.mobile = StringVar(self)
self.mobile.set('')
self.mobile=Entry(self,textvariable = self.mobile, width=280, bg='WHITE')
self.mobile.place(relx=0.2, rely=0.35, height=25, width=100)
# Proceed button
self.Submit = Button(self, text='Submit', fg="White",
bg="Red", command=self.insert)
self.Submit.place(relx=0.05,rely=0.50,height=25,width=100)
self.Output = StringVar(self)
self.Output.set('')
self.Output1 = Label(self, textvariable=self.Output, font=('times', 10),anchor='e', bg='WHITE').place(relx=0.05, rely=0.70, height=15, width=200)
self.name.bind("<Return>", self.focus1)
self.birthdate.bind("<Return>", self.focus2)
self.gender.bind("<Return>", self.focus3)
def focus1(self, event):
self.birthdate.focus_set()
def focus2(self, event):
self.gender.focus_set()
def focus3(self, event):
self.mobile.focus_set()
def get_inv_count(self,value):
global inv_cnt
inv_cnt = value
def clear(self):
self.name.delete(0, END)
self.birthdate.delete(0, END)
self.gender.delete(0, END)
self.mobile.delete(0, END)
def insert(self):
print(self.name.get(), self.birthdate.get(), self.gender.get(), self.mobile.get())
if (self.name.get() == "" and
self.birthdate.get() == "" and
self.gender.get() == "" and
self.mobile.get() == ""):
print("empty input")
else:
current_row = sheet.max_row
current_column = sheet.max_column
sheet.cell(row=current_row + 1, column=1).value = self.name.get()
sheet.cell(row=current_row + 1, column=2).value = self.birthdate.get()
sheet.cell(row=current_row + 1, column=3).value = self.gender.get()
sheet.cell(row=current_row + 1, column=4).value = self.mobile.get()
difference_in_years = relativedelta(datetime.strptime(datetime.now().strftime(datetimeFormat), datetimeFormat),
datetime.strptime(self.birthdate.get(), datetimeFormat)).years
self.Output.set("{0}_{1}_{2}_{3}".format(self.name.get()[:2], self.birthdate.get()[:4], difference_in_years, self.mobile.get()[-2:]))
wb.save('try.xlsx')
self.name.focus_set()
self.clear()
def excel():
sheet.cell(row=1, column=1).value = "name"
sheet.cell(row=1, column=2).value = "birth"
sheet.cell(row=1, column=3).value = "gender"
sheet.cell(row=1, column=4).value = "mobile"
class App(Tk):
def __init__(self):
global value
Tk.__init__(self)
self.title("MY GUI")
self.geometry('800x250')
self.resizable(0,0)
# create and pack a Mainframe window
Mainframe(self).place(x=0,y=0,height=250,width=800)
self.mainloop()
App()