2015-08-28 65 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

是的鍵盤按鍵 –