Создание GUI приложения Python tkinter. Как сделать Калькулятор на python Часть 2

preview_player
Показать описание
Стать спонсором канала и получить доступ к дополнительным материалам по Python

Курс по основам python на Степике

Записывайся на курс на Stepic по ООП, где найдешь много практических задач

Ссылка на урок

При помощи библиотеки tkinter можно создать свои десктопные графические приложения на python. Мы изучим все основные виджеты, которые применяются в формах и создадим на их основе такие проекты как Калькулятор, Paint, Сапер, Блокнот

Калькулятор на Python при помощи библиотеки tkinter

Все видео этого курса можете найти на сайте

или в Вк

Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк

В данном группе можете найти информацию о новых видео и задать вопросы
Рекомендации по теме
Комментарии
Автор

в функции add_digit есть баг. Если допустим попробовать написать 0*5, то в строке получится *5. В блоке if просто нужно добавить одно условие с длиной чтобы получилось:

if value[0] == '0' and len(value) == 1:

romaroman
Автор

Функцию add_digit можно переписать так:

def add_digit(digit):
if calc.get()[0] == '0' and len(calc.get()) == 1:
calc.delete(0, 'end')
calc.insert('end', digit)

multistudia
Автор

Огромное вам спасибо, всё доходчиво и доступно, обожаю вас^^

traurigerengel
Автор

Огромное спасибо все получилось только почему то знаки не заменяются но я с этим разберусь очень доступно удачи вам

teymurismaylov
Автор

кому надо весь код из этого видео, там я сам чуть по другому сделал и операцию 'очистить' добавил:
from tkinter import *
win = Tk()
win.title("Calculator")
win.geometry("195x220")
#function
def press(num):
value = text.get() + str(num)
if value[0] == '0':
value = value[1:]
text.delete(0, "end")
text.insert(0, value)
def op(o):
value = text.get()
if value[-1] in '-+/*':
value = value[:-1]
text.delete(0, "end")
text.insert(0, value+o)
def make(num):
return Button(win, text=num, bd=6,
command= lambda :press(num))
def make_o(operation):
return Button(win, text=operation, bd=6,
command= lambda :op(operation),
fg = 'red', bg='blue')
def calc(operation):
return Button(win, text=operation, bd=6,
command= lambda :press(operation),
fg = 'red', bg='blue')
text = Entry(win, font=('Arial', 16), width = 15)
text.insert(0, '0')
text.grid(row=0, column=0, columnspan=4, stick="we", padx=4, pady=2)
win.grid_columnconfigure(3, minsize=40)

make(1).grid(row=1, column=0, stick="wens", padx=6, pady=6)
make(2).grid(row=1, column=1, stick="wens", padx=6, pady=6)
make(3).grid(row=1, column=2, stick="wens", padx=6, pady=6)
make(4).grid(row=2, column=0, stick="wens", padx=6, pady=6)
make(5).grid(row=2, column=1, stick="wens", padx=6, pady=6)
make(6).grid(row=2, column=2, stick="wens", padx=6, pady=6)
make(7).grid(row=3, column=0, stick="wens", padx=6, pady=6)
make(8).grid(row=3, column=1, stick="wens", padx=6, pady=6)
make(9).grid(row=3, column=2, stick="wens", padx=6, pady=6)
make(0).grid(row=4, column=0, stick="wens", padx=6, pady=6)
def clear():
text.delete(0, 'end')
Button(win, text='C', fg = 'red', bg='blue', command = clear,
bd = 5).grid(row=4, column=2,
stick="wens", padx=6, pady=6)


make_o('+').grid(row=1, column=3, stick="wens", padx=6, pady=6)
make_o('-').grid(row=2, column=3, stick="wens", padx=6, pady=6)
make_o('/').grid(row=3, column=3, stick="wens", padx=6, pady=6)
make_o('*').grid(row=4, column=3, stick="wens", padx=6, pady=6)

make_o('=').grid(row=4, column=1, stick="wens", padx=6, pady=6)


win.mainloop()

Andrei-demf
Автор

Добрый день! Здорово, коллега, нужно попробовать сделать со своими учениками!))

lecturer_abramenkova
Автор

Автор молодец, но не хватает одной детальки). Во всех видео уроках не уделяется внимание комментариям в коде. На мой взгляд, для начинающих это важная привычка.

doctorshmurge
Автор

Спасибо за продолжение, очень помог!!!

qlyaxy
Автор

можно еще так
def add_operation(operation):
value=calc.get()
if value[-1] in '-+/*':
calc.delete(len(value)-1)
calc.insert(tk.END, operation)

ВитяХмельницкий-чл
Автор

Как добавить в код операции '1/x', 'x^2', '-x' и 'sqrt(x)'? Ломаюсь уже который день, не знаю, как

bigmax
Автор

все супер, но на этапе добавления add_operation у меня при клике на кнопки +-*/ выдает ошибку string index out of range

uladzimirpyzhyk
Автор

будет ли обзор возможности создавать окно как класс?

ankhmarcius
Автор

а есть функция, чтоб бэкграунд поменять на какую-то картинку, вместо фона?
ну типо .config(bg=картинка)

яданиил-пз
Автор

У меня почему то в VCC, через CTRL не заменяет уже в калькуляторе цифры, остаются все кнопки или 1 или digit, если вручную менять на make_digit_button - то все норм меняется

IZH
Автор

почему когда я пишу этот код то выходит это ошибка

def add_oper(oper):
value=calk.get()
if value[-1] in '-+/*':
value=value[:-1]
calk.delete(0, gen.END)
calk.insert(0, value+oper)
IndexError: string index out of range!

smpll
Автор

У меня шрифт на кнопке не становится красным ?
def
return tk.Button(text=operation, bd=5, fg='red', font=('Arial', 13), command=lambda: add_digit(operation))

andreivanov
Автор

В каком редакторе пишешь?
И какие плагины используешь?

machio
Автор

а где можно посмотреть на этот код и скопировать?

НуркасымБалтабаев-фг
Автор

нечего не получилось! Вместо кнопок просто стало digit как будут понимать?

GAME-vcwp
Автор

Объясните пожалуйста ещё раз, для чего строчка с delete

daniilloboda