@valeeryy
Начинающий в языке python

Модифицируйте калькулятор, чтобы, помимо кнопок, действие определялось (вызывалось) по КОМБИНАЦИЯМ клавиш?

у меня есть код, но нужно его переделать, чтоб помимо кнопок, действие определялось (вызывалось) по КОМБИНАЦИЯМ клавиш
from tkinter import *
from math import*

class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.build()

def build(self):
self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)

btns = [
"C", "DEL", "cos", "=",
"1", "2", "3", "M",
"4", "5", "6", "X^3",
"7", "8", "9", "√‎",
"(", "0", "F", "X^2",
]

x = 10
y = 140

for bt in btns:
com = lambda x=bt: self.logicalc(x)
Button(text=bt, bg="#FFF",
font=("Times New Roman", 15),
command=com).place(x=x, y=y,
width=115,
height=79)
x += 117
if x > 400:
x = 10
y += 81

def logicalc(self, operation):
if operation == "C":
self.formula = ""
elif operation == "DEL":
self.formula = self.formula[0:-1]
elif operation == "X^2":
self.formula = str((eval(self.formula))**2)
elif operation == "=":
self.formula = str(eval(self.formula))
elif operation == "M":
import math
self.formula = math.fabs(float(self.formula))
elif operation == "X^3":
self.formula = str((eval(self.formula))**3)
elif operation == "√‎":
from math import sqrt, exp
self.formula = (sqrt(float(self.formula)))
elif operation == "cos":
import math
q=degrees(float(self.formula))
self.formula=cos(float(q))
elif operation == "F":
import math
self.formula = factorial(float(self.formula))
else:
if self.formula == "0":
self.formula = ""
self.formula += operation
self.update()

def update(self):
if self.formula == "":
self.formula = "0"
self.lbl.configure(text=self.formula)

if __name__ == '__main__':
root = Tk()
root["bg"] = "#000"
root.geometry("485x550+200+200")
root.title("Калькулятор")
root.resizable(False, False)
app = Main(root)
app.pack()
root.mainloop()
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 1
@o5a
Нужно добавить слежение за нажатиями клавиш и отдельную функцию для обработки
# функция реакции на событие нажатия
def key_pressed(event):
    # event.char - содержит строку нажатой клавиши
    print('pressed key:', event.char)
    # соответственно отфильтруйте все ненужные клавиши, а остальные передавайте в свой logicalc()

app = Main(root)
app.bind("<Key>", key_pressed)
app.focus_set()
app.pack()
root.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы