Python 将数字和运算符按钮绑定到计算器按钮

Python 将数字和运算符按钮绑定到计算器按钮,python,tkinter,Python,Tkinter,我真的不知道如何做按钮绑定,因为我以前从未尝试过,但我确实有一个按钮绑定代码可以工作。我的问题是,我不能将工作的按钮绑定代码合并到使用类的计算器代码中。我该怎么做才能让这一切顺利进行 以下是我拥有的按钮绑定代码: from functools import partial from tkinter import * root = Tk() def key(event): print ("pressed", repr(event.char)) if event.char.isd

我真的不知道如何做按钮绑定,因为我以前从未尝试过,但我确实有一个按钮绑定代码可以工作。我的问题是,我不能将工作的按钮绑定代码合并到使用类的计算器代码中。我该怎么做才能让这一切顺利进行

以下是我拥有的按钮绑定代码:

from functools import partial
from tkinter import *

root = Tk()

def key(event):
    print ("pressed", repr(event.char))
    if event.char.isdigit():
        append_digit(event.char)
    elif event.char in ('\x08', '\x7f'):
        backspace()

def callback(event):
    frame.focus_set()
    print ("clicked at", event.x, event.y)

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

current = IntVar(0)
label = Label(frame, textvariable=current)
label.pack()

def button_callback(i):
    print ("clicked button {}".format(i))
    append_digit(i)

def append_digit(digit):
    current.set(current.get() * 10 + int(digit))

def backspace():
    current.set(current.get() // 10)

for i in '1234567890':
    Button(frame, text=i, command=partial(button_callback, i)).pack()
Button(frame, text='C', command=backspace).pack()

frame.focus_set()
root.mainloop()
您的按钮绑定(到回调)都是正确的

问题在于您的
自我。结果
条目-

self.results = Entry(display, textvariable=numbers, width=31, fg="snow", bg="snow", font="Verdana")
您已将字体颜色和背景颜色设置为相同的颜色,因此即使数字显示在计算器中,它们也不可见。将字体颜色(fg)更改为其他颜色,如黑色或其他颜色-

self.results = Entry(display, textvariable=numbers, width=31, fg="black", bg="snow", font="Verdana")

对于实际需要的,这在问题中还不清楚,那就是绑定键盘键。您放置的按钮/运算符绑定脚本的主要部分是-

frame.bind("<Key>", key)
您可以简单地将它们添加到您的类中(以及其他一些小的改进)-

从tkinter导入*
从functools导入部分
从tkinter导入消息框
root=Tk()
root.title(“计算器”)
根几何(“317x145”)
菜单栏=菜单(根)
类计算器(框架):
def uuu init uuu(self,master=None):
帧。\uuuu初始化(自,主)
master.bind(“,self.key)
显示=帧(根,bd=0,宽度=1000,高度=1000,浮雕=凹陷)
按钮=框架(根部,bd=0,宽度=7,高度=1,浮雕=凹槽)
display.grid(列=0,行=0,padx=0,pady=0)
buttons.grid(列=0,行=1,padx=1)
numbers=StringVar()
self.results=输入(显示,textvariable=数字,width=31,fg=“黑色”,bg=“雪花”,font=“Verdana”)
self.results.pack()
self.results.grid(列=0,行=0)
数字=[“7”、“4”、“1”、“8”、“5”、“2”、“9”、“6”、“3”]
对于范围(9)内的i:
n=数字[i]
按钮(按钮,bg=“snow”,text=n,width=7,height=1,command=self.show\u up(n),relief=RAISED)。网格(行=i%3,列=i//3)
清除=按钮(按钮,bg=“snow”,text=“C”,宽度=7,高度=1,命令=self.Clear,释放=升起)
清除.grid(padx=2,pady=2,列=3,行=0)
等于=按钮(按钮,bg=“snow”,text=“=”,宽度=7,高度=1,命令=self.Equals,释放=升起)
等于.grid(padx=2,pady=2,列=4,行=3)
全部清除=按钮(按钮,bg=“snow”,text=“AC”,宽度=7,高度=1,命令=自身。全部清除,释放=升起)
全部清除.grid(padx=2,pady=2,列=4,行=0)
方括号=按钮(按钮,bg=“snow”,text=“(”,宽度=7,高度=1,命令=自身。方括号=按钮,卸压=升起)
括号内为一个网格(padx=2,pady=2,列=2,行=3)
括号二=按钮(按钮,bg=“snow”,text=“)”,宽度=7,高度=1,命令=self。括号二,释放=升起)
括号2.网格(padx=2,pady=2,列=3,行=3)
零=按钮(按钮,bg=“snow”,text=“0”,宽度=7,高度=1,命令=自零,释放=升起)
网格(padx=2,pady=2,列=0,行=3)
小数点=按钮(按钮,bg=“snow”,text=“.”,宽度=7,高度=1,命令=自身小数点,释放=升起)
小数点网格(padx=2,pady=2,列=1,行=3)
乘法=按钮(按钮,bg=“red”,text=“x”,宽度=7,高度=1,命令=self.乘法,释压=RAISED)
网格(padx=2,pady=2,列=3,行=1)
分割=按钮(按钮,bg=“粉蓝”,text=“/”,宽度=7,高度=1,命令=self.Division,浮雕=RAISED)
网格划分(padx=2,pady=2,列=4,行=1)
添加=按钮(按钮,bg=“黄色”,text=“+”,宽度=7,高度=1,命令=self.Addition,释压=RAISED)
Addition.grid(padx=2,pady=2,column=3,row=2)
减法=按钮(按钮,bg=“绿色”,text=“-”,宽度=7,高度=1,命令=self.减法,浮雕=RAISED)
网格(padx=2,pady=2,列=4,行=2)
def键(自身、事件):
如果event.char.isdigit():
self.results.insert(END,event.char)
('\x08','\x7f')中的elif event.char:
self.clear()
def显示(自我,x):
返回lambda:self.results.insert(END,x)
def等于(自身):
尝试:
result=eval(self.results.get())
除:
结果=“错误”
self.all_clear()
self.results.insert(0,结果)
def零(自):
自我结果。插入(结束,“0”)
def支架1(自身):
self.results.insert(结束,“(”)
def支架2(自身):
self.results.insert(结束,“)”)
def全部清除(自):
self.results.delete(0,结束)
def清除(自):
self.results.delete(len(self.results.get())-1)
def乘法(自):
self.results.insert(结束,“*”)
def部门(自我):
self.results.insert(结束,“/”)
def添加(自):
self.results.insert(结束,“+”)
def减法(自):
self.results.insert(结束,“-”)
def小数点(自身):
self.results.insert(结束,“.”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
计算器(根)
root.config(menu=menubar)
root.mainloop()

您是说绑定编号按钮吗?是的,以及操作员按钮操作员按钮似乎正确绑定,是吗?为什么当我在键盘上按减号时,计算器不会显示一个“-”?哦,我明白了,我现在可以看到它们:)但我的意思是按钮绑定,例如,当我按数字5时,我不必点击计算器显示屏,然后按数字5就可以看到显示屏上的“5”。我说得通吗…?你是说键盘键?哦,非常感谢,我只有一个问题。。。一切正常,但当我按backspace时,它会将其添加到按下的按钮列表中,而不是删除条目。如何使backspace删除条目?在绑定脚本中进行更改,而不是在其他脚本中调用backspace函数,调用
s
frame.bind("<Key>", key)
def key(event):
    print ("pressed", repr(event.char))
    if event.char.isdigit():
        append_digit(event.char)
    elif event.char in ('\x08', '\x7f'):
        backspace()
from tkinter import *
from functools import partial
from tkinter import messagebox
root = Tk()
root.title("Calculator")
root.geometry("317x145")

menubar = Menu(root)

class Calculator(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        master.bind("<Key>", self.key)
        display = Frame(root, bd=0, width=1000, height=1000, relief=SUNKEN)
        buttons = Frame(root, bd=0, width=7, height=1, relief=GROOVE)
        display.grid(column=0, row=0, padx=0, pady=0)
        buttons.grid(column=0, row=1, padx=1)
        numbers = StringVar()
        self.results = Entry(display, textvariable=numbers, width=31, fg="black", bg="snow", font="Verdana")
        self.results.pack()
        self.results.grid(column=0, row=0)

        numbers=["7", "4", "1", "8", "5", "2", "9", "6", "3"]
        for i in range(9):
            n=numbers[i]
            Button(buttons, bg="snow", text=n, width=7, height=1, command=self.show_up(n), relief=RAISED).grid(row=i%3, column=i//3)
        Clear = Button(buttons, bg="snow", text="C", width=7, height=1, command=self.clear, relief=RAISED)
        Clear.grid(padx=2, pady=2, column=3, row=0)
        Equals = Button(buttons, bg="snow", text="=", width=7, height=1, command=self.equals, relief=RAISED)
        Equals.grid(padx=2, pady=2, column=4, row=3)
        All_clear = Button(buttons, bg="snow", text="AC", width=7, height=1, command=self.all_clear, relief=RAISED)
        All_clear.grid(padx=2, pady=2, column=4, row=0)
        Bracket_one = Button(buttons, bg="snow", text="(", width=7, height=1, command=self.bracket_one, relief=RAISED)
        Bracket_one.grid(padx=2, pady=2, column=2, row=3)
        Bracket_two = Button(buttons, bg="snow", text=")", width=7, height=1, command=self.bracket_two, relief=RAISED)
        Bracket_two.grid(padx=2, pady=2, column=3, row=3)
        Zero = Button(buttons, bg="snow", text="0", width=7, height=1, command=self.zero, relief=RAISED)
        Zero.grid(padx=2, pady=2, column=0, row=3)
        Decimal_point = Button(buttons, bg="snow", text=".", width=7, height=1, command=self.decimal_point, relief=RAISED)
        Decimal_point.grid(padx=2, pady=2, column=1, row=3)
        Multiplication = Button(buttons, bg="red", text="x", width=7, height=1, command=self.multiplication, relief=RAISED)
        Multiplication.grid(padx=2, pady=2, column=3, row=1)
        Division = Button(buttons, bg="powder blue", text="/", width=7, height=1, command=self.division, relief=RAISED)
        Division.grid(padx=2, pady=2, column=4, row=1)
        Addition = Button(buttons, bg="yellow", text="+", width=7, height=1, command=self.addition, relief=RAISED)
        Addition.grid(padx=2, pady=2, column=3, row=2)
        Subtraction = Button(buttons, bg="green", text="-", width=7, height=1, command=self.subtraction, relief=RAISED)
        Subtraction.grid(padx=2, pady=2, column=4, row=2)

    def key(self, event):
        if event.char.isdigit():
            self.results.insert(END, event.char)
        elif event.char in ('\x08', '\x7f'):
            self.clear()

    def show_up(self, x):
        return lambda: self.results.insert(END, x)

    def equals(self):
        try:
            result = eval(self.results.get())
        except:
            result = "Error"
        self.all_clear()
        self.results.insert(0, result)
    def zero(self):
        self.results.insert(END, "0")
    def bracket_one(self):
        self.results.insert(END, "(")
    def bracket_two(self):
        self.results.insert(END, ")")
    def all_clear(self):
        self.results.delete(0, END)
    def clear(self):
        self.results.delete(len(self.results.get()) - 1)
    def multiplication(self):
        self.results.insert(END, "*")
    def division(self):
        self.results.insert(END, "/")
    def addition(self):
        self.results.insert(END, "+")
    def subtraction(self):
        self.results.insert(END, "-")
    def decimal_point(self):
        self.results.insert(END, ".")    

if __name__ == '__main__':
    Calculator(root)
    root.config(menu=menubar)
    root.mainloop()