Мое первое GUI Python приложение

Я новичок в python, да и вообще в создании приложений. Это мой первый опыт.

Я решил взять, что нить простенькое, не такое замысловатое, остановился на простом калькуляторе. Код писал не очень долго. Сначала набросал кривой костяк, потом его потихоньку оттачивал. Вот что получилось в итоге.

from tkinter import *
from math import *
from tkinter import ttk
import tkinter.messagebox as box
from functools import partial
window = Tk()
window.title('Калькулятор')
window.geometry('400x285')
window.resizable(False, False)
window["bg"] = "gray22"

# Создание необходимых функций


def buttons(number):
    res = label2['text']
    if number == 'sin':
        res2 = sin(radians(float(res)))
        label2.config(text=res2)
    elif number == 'cos':
        res2 = cos(radians(float(res)))
        label2.config(text=res2)
    elif number == 'tg':
        res2 = tan(radians(float(res)))
        label2.config(text=res2)
    elif number == 'ctg':
        res2 = cos(radians(float(res))) / sin(radians(float(res)))
        label2.config(text=res2)
    elif number == 'sqrt':
        res2 = sqrt(float(res))
        label2.config(text=res2)
    elif number == 'pow2':
        res2 = float(res) ** 2
        label2.config(text=res2)
    elif number == '/':
        res2 = res + '÷'
        label2.config(text=res2)
    elif number == 'fact':
        res2 = str(res) + '!'
        label2.config(text=res2)
    elif number == 'point':
        res2 = res + '.'
        label2.config(text=res2)
    elif number == '=':
        res = res.replace('÷', '/')
        res = res.replace('^', '**')
        if not res.find('!') == -1:
            if len(label2['text']) <= 1:
                box.showerror('Ошибка', 'Вы ввели не верное выражение')
            else:
                label2.config(text=factorial(float(res[0:-1])))
        else:
            try:
                label2.config(text=eval(res))
            except BaseException:
                box.showerror('Ошибка', 'Вы ввели не верное выражение')
    elif number == 'C':
        label2.config(text='')
    elif number == 'pi':
        label2.config(text=pi)
    elif number == 'pow':
        label2.config(text=res + '^')
    else:
        if len(str(res)) >= 20:
            box.showinfo('Информация', 'Слишком много цифр')
        elif len(str(res)) < 20:
            res2 = str(res) + str(number)
            label2.config(text=res2)
        if label2['text'] == '23092005':
            box.showinfo(
                'Пасхалка',
                'Я тут посчитал, по подсчетам, ты идешь нахер, кстати, можешь вбить 666, попробуй, что будет :)')
            label2.config(text='')
        if label2['text'] == '666':
            box.showinfo('666', 'А это а ля адская петля')
            box.showwarning('666', 'И кто тебя просил это делать?')
            box.showerror('System', 'Форматирование диска С прошло успешно')
            box.showerror('666', 'Да шучу, не такой я злой)')
            box.askquestion('666', 'А свалить отсюда хочешь?')
            box.showwarning(
                'Да нажми ctrl alt delete емае',
                'А мне пофигу, ты останешся тут ...')
            while True:
                box.showerror('666', '... Навсегда')


def back():
    try:
        label2.config(text=label2['text'][0:-1])
    except TypeError:
        label2.config(text='')

# Создание виждетов


s = ttk.Style()
s.configure('my.TButton',
            font=(
                'Times New Roman',
                25,
                'bold'),
            foreground="green",
            )

s.map("my.TButton",
      foreground=[('pressed', 'red'), ('active', 'blue')],
      background=[('pressed', '!disabled', 'yellow'), ('active', 'white')]
      )
s.layout("my.TButton", [
    ("Menubutton.background", None),
    ("Menubutton.button", {"children":
                           [("Menubutton.focus", {"children":
                                                  [("Menubutton.padding", {"children":
                                                                           [("Menubutton.label", {
                                                                            "side": "left", "expand": 1})]
                                                                           })]
                                                  })]
                           }),
])

# Создание и размещение кнопок

label2 = ttk.Label(
    window,
    text='',
    style='my.TButton'
)


btns_names = {
    '1': '1', '2': '2', '3': '3', '+': '+', 'sin': 'si', 'cos': 'co', 'pi': 'π',
    '4': '4', '5': '5', '6': '6', '-': '- ', 'tg': ' t', 'ctg': 'ct ', '(': '(',
    '7': '7', '8': '8', '9': '9', '*': '*', 'pow2': 'a²', 'sqrt': ' √ ', ')': ')',
    'C': 'C', '0': '0', '=': '=', '/': '÷', 'point': ' . ', 'fact': '  ! ', 'pow': 'а^'
}

x, y = 25, 50

for i in btns_names:
    btns_names[i] = ttk.Button(
        window,
        text=btns_names[i],
        style='my.TButton',
        command=partial(buttons, i)
    )
    btns_names[i].place(
        width=45,
        height=45,
        x=x,
        y=y)
    if x >= 320:
        x = 25
        y += 60
    elif x < 290:
        x += 50

button_backspace = ttk.Button(
    window,
    text='<=',
    command=back,
    style='my.TButton',
)

# Размещение

label2.place(
    x=25,
    y=5,
    width=295,
    height=40
)
button_backspace.place(
    x=325,
    y=5,
    width=45,
    height=40
)

# Обработка окна
window.mainloop()

Хотелось бы критики для чайников, чтобы знать, что и где поменять, заменить и оптимизировать. Перед тем как писать совет/критику, помните, я просто начинающий кодер :) P.S. https://pastebin.com/P3xWYXRW


Ответы (0 шт):