Здравствуйте, я бы хотел чтобы вы взглянули на код ниже я написал маленький калькулятор сразу скажу что математические функции я взял из одного видео так что не до конца понимаю их работу но в основном код мой и хотелось бы чтобы вы дали мне советы и рекомендации и еще указали бы на мои ошибки в коде, я новичок в python могу только классный интерфейс замутить а функции еще не до изучил посмотрите может можно как то по иному или лучше реализовать можно,
За ранее огромное спасибо.
from tkinter import *
from tkinter import ttk
def iCalc(source, side):
storeObj = Frame(source)
storeObj.pack(side=side, expand=True, fill='both')
return storeObj
def button(source, side, text, command=None):
storeObj = Button(source, relief='flat', text=text, command=command, font='Simple 16')
storeObj.pack(side=side, expand=True, fill='both')
return storeObj
class App(Tk):
def __init__(self):
Tk.__init__(self)
StrVar = StringVar()
self.title('Calculator')
self.overrideredirect(True)
self.minsize(width=256, height=384)
self.geometry('384x384+192+192')
self.attributes('-topmost', True)
self.config(background='#2f2f2f')
self.frmCaption = Frame(self, height=40, bg='#2f2f2f')
self.frmCaption.propagate(False)
self.frmCaption.pack(side='top', fill='both')
self.frmFooter = Frame(self, height=20, bg='#f2f2f2')
self.frmFooter.propagate(False)
self.frmFooter.pack(side='bottom', fill='both')
self.btnMove = Button(self.frmCaption, relief='flat', bg='#f2f2f2', cursor='fleur')
self.btnMove.bind('<ButtonPress-1>', self.TeMotion)
self.btnMove.bind('<ButtonRelease-1>', self.FeMotion)
self.btnMove.bind('<B1-Motion>', self.GoMotion)
self.btnMove.bind('<Double-Button-1>', self._dty)
self.btnMove.place(x=2, y=2, width=36, height=36)
self.entInput = Entry(self.frmCaption, relief='flat', textvariable=StrVar, justify='center', insertwidth=1, font='Simple 16')
self.entInput.bind('<Return>', lambda e, s=self, storeObj=StrVar: s.calc(storeObj), '+')
self.entInput.place(x=40, y=2, relwidth=1, width=-42, height=36)
self.sizeGrip = ttk.Sizegrip(self.frmFooter).place(x=-20, relx=1, y=0, width=18, height=18)
self.frmPack = Frame(self, bg='#fff')
self.frmPack.propagate(False)
self.frmPack.place(x=2, y=40, width=-4, height=-62, relwidth=1, relheight=1)
for clearBut in ("C"):
erase = iCalc(self.frmPack, TOP)
for ichar in clearBut:
button(erase, LEFT, ichar, lambda storeObj=StrVar, q=ichar: storeObj.set(''))
for NumBut in ('789/', '456*', '123-', '0.+'):
FunctionNum = iCalc(self.frmPack, TOP)
for iEquals in NumBut:
button(FunctionNum, LEFT, iEquals, lambda storeObj=StrVar, q=iEquals: storeObj.set(storeObj.get() + q))
EqualsButton = iCalc(self.frmPack, TOP)
for iEquals in '=':
if iEquals == '=':
btniEquals = button(EqualsButton, LEFT, iEquals)
btniEquals.bind('<ButtonRelease-1>', lambda e, s=self, storeObj=StrVar: s.calc(storeObj), '+')
else:
btniEquals = button(EqualsButton, LEFT, iEquals, lambda storeObj=StrVar, s=' %s '%iEquals: storeObj.set(storeObj.get()+s))
def calc(self, StrVar):
try:
StrVar.set(eval(StrVar.get()))
except:
StrVar.set('')
def TeMotion(self, event):
self.x = event.x
self.y = event.y
def FeMotion(self, event):
self.x = None
self.y = None
def GoMotion(self, event):
AxisX = event.x - self.x
AxisY = event.y - self.y
x = self.winfo_x() + AxisX
y = self.winfo_y() + AxisY
self.geometry('+%s+%s' % (x, y))
def _dty(self, event):
self.destroy()
if __name__ == '__main__':
self = App().mainloop()