Задача 1. «Калькулятор»

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Задание: Написать приложение с графическим интерфейсом «Калькулятор». Оно должно
содержать: индикатор вывода результата, четыре кнопки с основными операциями [+], [-],
[*], [/] и кнопки [=], [С], [1/x], [x2].1234.png
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Задача 2*. «Калькулятор+»
Задание: Добавить в приложение «Калькулятор» дополнительные кнопки:
[√] (код=8730), [±] (код=177), [←] (код=8592), [÷] (код=247).
Примечание. В качестве образа можно использовать вид калькулятора Windows:
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
В чем конкретно вопрос? Берешь tkinter например и пишешь

Вот самый простой пример:
Python:
import subprocess
subprocess.call('calc')
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
В чем конкретно вопрос? Берешь tkinter например и пишешь

Вот самый простой пример:
Python:
import subprocess
subprocess.call('calc')
Тут не вопрос, тут просьба о помощи, помочь решить задачу.!!!)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Python:
import tkinter as tk
import math
 
def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)
 
def add_operation(operation):
    value = calc.get()
    if value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 
def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))
 
def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)
 
def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))
 
def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))
 
def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)
 
def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)
 
root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)
 
calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)
 
abbreviation_clear_button("C").grid(row=1, column=0, stick="wens", pady=2, padx=2)
abbreviation("1/x").grid(row=1, column=1, stick="wens", pady=2, padx=2)
abbreviation("x2").grid(row=1, column=2, stick="wens", pady=2, padx=2)
abbreviation("7").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=5, column=0, stick="wens", pady=2, padx=2)
 
abbreviation_operation_button("/").grid(row=1, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=5, column=1, stick="wens", pady=2, padx=2)
 
root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)
 
root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)
 
root.mainloop()
Мой код, но он не похож на калькулятор Windows, и в нем не работают кнопки, 1/x, x2. И кнопку бы =, увеличить до границы, кнопки +.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Чтобы растянуть элемент на несколько колонок можно задать columnspan (Сколько колонок)
А чтобы кнопки работали, можешь заменить их на другие значки, например & или $.
Хотя бы я менял по какой логике работает определение какие операции использовать
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Python:
import tkinter as tk
import math
 
def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 
def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))
 
def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)
 
def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))
 
def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))
 
def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)
 
def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x357")
root.resizable(width=False, height=False)
 
calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=5, column=0, columnspan=2, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=1, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=1, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=5, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)
 
root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)
 
root.mainloop()

Кнопки растянул))) Но кнопки [1/x], [x2] никак не могу, заставить работать.
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Чтобы растянуть элемент на несколько колонок можно задать columnspan (Сколько колонок)
А чтобы кнопки работали, можешь заменить их на другие значки, например & или $.
Хотя бы я менял по какой логике работает определение какие операции использовать
Посмотрите пожалуйста)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Чтобы растянуть элемент на несколько колонок можно задать columnspan (Сколько колонок)
А чтобы кнопки работали, можешь заменить их на другие значки, например & или $.
Хотя бы я менял по какой логике работает определение какие операции использовать
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Чтобы растянуть элемент на несколько колонок можно задать columnspan (Сколько колонок)
А чтобы кнопки работали, можешь заменить их на другие значки, например & или $.
Хотя бы я менял по какой логике работает определение какие операции использовать
Здравстуйте еще раз))) А можно полный рабочий код.??))) Что-то не работает у меня.(((
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Ну вот например рабочий, это из твоего предыдущего поста с доработанной функцией add_operation:
Python:
import tkinter as tk
import math

def add_digit(digit):
    value = calc.get()
    if value[0] == "0":
        value = value[1:]
    calc.delete(0, tk.END)
    calc.insert(0, value+digit)

def add_operation(operation):
    value = calc.get()
    print(value)
    if value[-1] in "-+/*":
        value = value[:-1]
    elif operation == '1/x':
        operation = ''
        value = f"1/({value})"
    elif operation == 'x2':
        operation = ''
        value = f"2*({value})"
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value = calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0, 0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root = tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x357")
root.resizable(width=False, height=False)
calc = tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15), width=15)
calc.insert(0, "0")
calc.grid(row=0, column=0, columnspan=4, stick="we", padx=5)
abbreviation("7").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=5, column=0, columnspan=2,
                       stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(
    row=1, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "1/x").grid(row=1, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(
    row=1, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "/").grid(row=1, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "*").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "-").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "+").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(
    row=5, column=2, columnspan=2, stick="wens", pady=2, padx=2)
root.grid_columnconfigure(0, minsize=65)
root.grid_columnconfigure(1, minsize=65)
root.grid_columnconfigure(2, minsize=65)
root.grid_columnconfigure(3, minsize=65)
root.grid_columnconfigure(4, minsize=65)
root.grid_rowconfigure(1, minsize=65)
root.grid_rowconfigure(2, minsize=65)
root.grid_rowconfigure(3, minsize=65)
root.grid_rowconfigure(4, minsize=65)
root.grid_rowconfigure(5, minsize=65)
root.grid_rowconfigure(6, minsize=65)
root.mainloop()
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Ну вот например рабочий, это из твоего предыдущего поста с доработанной функцией add_operation:
Python:
import tkinter as tk
import math

def add_digit(digit):
    value = calc.get()
    if value[0] == "0":
        value = value[1:]
    calc.delete(0, tk.END)
    calc.insert(0, value+digit)

def add_operation(operation):
    value = calc.get()
    print(value)
    if value[-1] in "-+/*":
        value = value[:-1]
    elif operation == '1/x':
        operation = ''
        value = f"1/({value})"
    elif operation == 'x2':
        operation = ''
        value = f"2*({value})"
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value = calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0, 0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root = tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x357")
root.resizable(width=False, height=False)
calc = tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15), width=15)
calc.insert(0, "0")
calc.grid(row=0, column=0, columnspan=4, stick="we", padx=5)
abbreviation("7").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=5, column=0, columnspan=2,
                       stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(
    row=1, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "1/x").grid(row=1, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(
    row=1, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "/").grid(row=1, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "*").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "-").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "+").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(
    row=5, column=2, columnspan=2, stick="wens", pady=2, padx=2)
root.grid_columnconfigure(0, minsize=65)
root.grid_columnconfigure(1, minsize=65)
root.grid_columnconfigure(2, minsize=65)
root.grid_columnconfigure(3, minsize=65)
root.grid_columnconfigure(4, minsize=65)
root.grid_rowconfigure(1, minsize=65)
root.grid_rowconfigure(2, minsize=65)
root.grid_rowconfigure(3, minsize=65)
root.grid_rowconfigure(4, minsize=65)
root.grid_rowconfigure(5, minsize=65)
root.grid_rowconfigure(6, minsize=65)
root.mainloop()
Работает, но надо немного по другому, например нажал кнопку 5 потом 1/x и сразу нужен результат 0,2, и также со второй кнопкой нажал кнопку 5 потом x2 и сразу результат 25. Помогите, больше некому.)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Ну вот например рабочий, это из твоего предыдущего поста с доработанной функцией add_operation:
Python:
import tkinter as tk
import math

def add_digit(digit):
    value = calc.get()
    if value[0] == "0":
        value = value[1:]
    calc.delete(0, tk.END)
    calc.insert(0, value+digit)

def add_operation(operation):
    value = calc.get()
    print(value)
    if value[-1] in "-+/*":
        value = value[:-1]
    elif operation == '1/x':
        operation = ''
        value = f"1/({value})"
    elif operation == 'x2':
        operation = ''
        value = f"2*({value})"
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value = calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0, 0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root = tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x357")
root.resizable(width=False, height=False)
calc = tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15), width=15)
calc.insert(0, "0")
calc.grid(row=0, column=0, columnspan=4, stick="we", padx=5)
abbreviation("7").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=5, column=0, columnspan=2,
                       stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(
    row=1, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "1/x").grid(row=1, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(
    row=1, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "/").grid(row=1, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "*").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "-").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button(
    "+").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(
    row=5, column=2, columnspan=2, stick="wens", pady=2, padx=2)
root.grid_columnconfigure(0, minsize=65)
root.grid_columnconfigure(1, minsize=65)
root.grid_columnconfigure(2, minsize=65)
root.grid_columnconfigure(3, minsize=65)
root.grid_columnconfigure(4, minsize=65)
root.grid_rowconfigure(1, minsize=65)
root.grid_rowconfigure(2, minsize=65)
root.grid_rowconfigure(3, minsize=65)
root.grid_rowconfigure(4, minsize=65)
root.grid_rowconfigure(5, minsize=65)
root.grid_rowconfigure(6, minsize=65)
root.mainloop()
Дали такую задачу, реализовать, вот эти кнопки, число 1 деленное на любое число, тоесть 1/x, и квадрат числа, тоесть x2.
 

Вложения

  • L16_Calc.pdf
    75,5 КБ · Просмотры: 3

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Замени add_operation на это:
Python:
def add_operation(operation):
    value = calc.get()
    print(value)
    if operation == '1/x':
        operation = ''
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == 'x²':
        operation = ''
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Замени add_operation на это:
Python:
def add_operation(operation):
    value = calc.get()
    print(value)
    if operation == '1/x':
        operation = ''
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == 'x²':
        operation = ''
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
Спасибо Вам большое!!!))) Премного Вам благодарен, а можно Вас попросить, помогите пожалуйста, со вторым калькулятором, во вложении сверху.
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Python:
import tkinter as tk
from math import *
 
def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == "√":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 
def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)
 
def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))
 
def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))
 
def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)
 
def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)
 
calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("←").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("√").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("±").grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)
 
root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)
 
root.mainloop()
Замени add_operation на это:
Python:
def add_operation(operation):
    value = calc.get()
    print(value)
    if operation == '1/x':
        operation = ''
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == 'x²':
        operation = ''
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or '/' in value or '*' in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
Почти сделал, только есть один момент, кнопка √ в отличии от Калькулятора Windows, прибавляет на одну цифру, при повторном нажатии, как убрать этот момент. И помогите, с кнопками ±, ←, кнопка ± положительное число в отрицательное и наоборот, и кнопка ← убирает значение, например 123 стало 12, или 1, стало 0. И как в коде прописать дополнительные кнопки: [√] (код=8730), [±] (код=177), [←] (код=8592), [÷] (код=247), чтоб они брали коды с таблицы символов.??)))
 
Последнее редактирование:

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Почти сделал, только есть один момент, кнопка √ в отличии от Калькулятора Windows, прибавляет на одну цифру, при повторном нажатии, как убрать этот момент. И помогите, с кнопками ±, ←, кнопка ± положительное число в отрицательное и наоборот, и кнопка ← убирает значение, например 123 стало 12, или 1, стало 0. И как в коде прописать дополнительные кнопки: [√] (код=8730), [±] (код=177), [←] (код=8592), [÷] (код=247), чтоб они брали коды с таблицы символов.??)))
Python:
import tkinter as tk
from math import *
 
def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == "√":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 
def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)
 
def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))
 
def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))
 
def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)
 
def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)
 
calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("←").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("√").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("±").grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)
 
root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)
 
root.mainloop()
Вот мой код.
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
import tkinter as tk
from math import *
 
def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == "√":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)
 
def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, eval(value))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)
 
def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))
 
def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))
 
def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)
 
def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)
 
calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("←").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("√").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("±").grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)
 
root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)
 
root.mainloop()
Вот мой код.
кнопка ← бери срез от первого элемента value до предпоследнего (value[:-1])
кнопка ± - умножай на -1

Добавь перед
calc.delete(0, tk.END)
calc.insert(0, value+operation)

Строку
value = value.removesuffix('.0')

А в calculate
calc.insert(0, str(eval(value)).removesuffix('.0'))
вместо
calc.insert(0, eval(value))

Это очистит незначащие нули
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
кнопка ← бери срез от первого элемента value до предпоследнего (value[:-1])
кнопка ± - умножай на -1

Добавь перед
calc.delete(0, tk.END)
calc.insert(0, value+operation)

Строку
value = value.removesuffix('.0')

А в calculate
calc.insert(0, str(eval(value)).removesuffix('.0'))
вместо
calc.insert(0, eval(value))

Это очистит незначащие нули
Здравствуйте.!!!))) Срезы ещё не проходили, помогите пожалуйста, никак не получается.!!!(((
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
кнопка ← бери срез от первого элемента value до предпоследнего (value[:-1])
кнопка ± - умножай на -1

Добавь перед
calc.delete(0, tk.END)
calc.insert(0, value+operation)

Строку
value = value.removesuffix('.0')

А в calculate
calc.insert(0, str(eval(value)).removesuffix('.0'))
вместо
calc.insert(0, eval(value))

Это очистит незначащие нули
Python:
import tkinter as tk
from math import *

def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == "√":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif operation == "←":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value[:-9]))
    elif operation == "±":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)*-1)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    value = value.removesuffix(".0")
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, str(eval(value)).removesuffix(".0"))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)

calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("←").grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("√").grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("±").grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)

root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)

root.mainloop()

Кнопку ← завёл, но срез, никак, не могу реализовать.!!!(((
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
кнопка ← бери срез от первого элемента value до предпоследнего (value[:-1])
кнопка ± - умножай на -1

Добавь перед
calc.delete(0, tk.END)
calc.insert(0, value+operation)

Строку
value = value.removesuffix('.0')

А в calculate
calc.insert(0, str(eval(value)).removesuffix('.0'))
вместо
calc.insert(0, eval(value))

Это очистит незначащие нули
Разобрался.!!!))) Возник такой вопрос, а как в коде прописать дополнительные кнопки: [√] (код=8730), [±] (код=177), [←] (код=8592), [÷] (код=247), чтоб они брали коды с таблицы символов.??))) И чтоб код был рабочий.??)))
 

Форум IT Специалистов