2015-08-28 69 views
-1

我真的不知道如何做按钮绑定,因为我从来没有尝试过,但我确实有一个按钮绑定的代码工作我的问题是,我不能合并工作按钮绑定代码到我的计算器代码,它使用一个类。我需要做些什么来完成这项工作?绑定数字和运算符按钮到计算器按钮

这里是按键绑定我的代码:

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() 

这里是我的实际计算器代码:

 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=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 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(-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, ".")  
+0

你说的是绑定'数字'按钮吗? –

+0

是的,以及操作员按钮 –

+0

操作员按钮似乎是正确绑定 –

回答

0

您按钮绑定(以回调)是正确的。

的问题是与你的self.results入门 -

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) 

而且

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() 
+0

Ohhhhhh我看到我现在可以看到他们:)但是我的意思是按钮绑定,比如当我按下例如数字5时,我不必点击计算器显示屏幕然后按数字5以便看到“ 5“。我有道理......? –

+0

你的意思是键盘按键? –

+0

是的键盘按键 –