2014-10-01 70 views
0
import tkinter 
import tkinter.messagebox 

import sys 

top=tkinter.Tk()  
from tkinter import* 



def clear(): 
    e1.delete(0,END) 
    return 
def seven(): 
    v.set(v.get()+str("7")) 
    v.get() 
def eight(): 
    v.set(v.get()+str("8")) 
    v.get() 
def nine(): 
    v.set(v.get()+str("9")) 
    v.get() 
def four(): 
    v.set(v.get()+str("4")) 
    v.get() 
def five(): 
    v.set(v.get()+str("5")) 
    v.get() 
def six(): 
    v.set(v.get()+str("6")) 
    v.get() 
def one(): 
    v.set(v.get()+str("1")) 
    v.get() 
def two(): 
    v.set(v.get()+str("2")) 
    v.get() 
def three(): 
    v.set(v.get()+str("3")) 
    v.get() 
def zero(): 
    v.set(v.get()+str("0")) 
    v.get() 
def add(): 
    global op1 
    op1=v.get() 
    e1.delete(0,END) 
def equals(): 
    v.set(int(op1)+int(v.get())) 
    v.get() 




top.title("D & R Calculator") 
top.geometry("290x240") 
from tkinter import* 
frame=Frame(top) 
frame.grid(column=0,row=0) 
framenum=Frame(top,height=265) 
framenum.grid() 
v=StringVar() 



from tkinter import* 
e1=Entry(frame,width=30,textvariable=v) 
e1.grid(row=0,column=0,sticky=W+E) 

b7=tkinter.Button(framenum,text="7",height=3,width=9,command=seven) 
b7.grid(row=0,column=1) 

b8=tkinter.Button(framenum,text="8",height=3,width=9,command=eight) 
b8.grid(row=0,column=2) 

b9=tkinter.Button(framenum,text="9",height=3,width=9,command=nine) 
b9.grid(row=0,column=3) 

b4=tkinter.Button(framenum,text="4",height=3,width=9,command=four) 
b4.grid(row=1,column=1) 

b5=tkinter.Button(framenum,text="5",height=3,width=9,command=five) 
b5.grid(row=1,column=2) 

b6=tkinter.Button(framenum,text="6",height=3,width=9,command=six) 

b6.grid(row=1,column=3) 

b1=tkinter.Button(framenum,text="1",height=3,width=9,command=one) 
b1.grid(row=2,column=1) 

b2=tkinter.Button(framenum,text="2",height=3,width=9,command=two) 
b2.grid(row=2,column=2) 

b3=tkinter.Button(framenum,text="3",height=3,width=9,command=three) 
b3.grid(row=2,column=3) 

b0=tkinter.Button(framenum,text="0",height=3,width=9,command=zero) 
b0.grid(row=3,column=2) 


f1=tkinter.Button(framenum,text="+",height=3,width=9,command=add) 
f1.grid(row=2,column=4) 

f2=tkinter.Button(framenum,text="-",height=3,width=9) 
f2.grid(row=1,column=4) 

f3=tkinter.Button(framenum,text="X",height=3,width=9) 
f3.grid(row=0,column=4) 

f4=tkinter.Button(framenum,text="/",height=3,width=9) 
f4.grid(row=3,column=4) 


eq=tkinter.Button(framenum,text="=",height=3,width=9,command=equals) 
eq.grid(row=3,column=3) 
c=tkinter.Button(framenum,text="CE",height=3,width=9,command=clear) 
c.grid(row=3,column=1) 


top.mainloop 

我挑戰自己做一個tkinter計算器沒有使用教程。我終於做到了,但有一個問題。它只能做一個功能。無論是加法,乘法,除法還是帶走,它只能執行一項操作。我想知道的是,如何讓計算器記住哪個按鈕被按下/哪個命令可以區分不同的功能。基本上,我需要幫助或指導,讓計算器完成所有操作,而不是僅僅執行一項操作,而必須手動編輯並執行其他操作。幫助甚至只是向正確的方向推進會很好,我對Python非常陌生。Tkinter計算器,只能做1操作

+0

你的命名約定也可以更好,但只要你明白了:) – W1ll1amvl 2014-10-01 22:08:39

回答

0

好吧,所以有一些事情你錯了代碼:

  • 你缺少括號後top.mainloop()

  • 你也行的時代from tkinter import *堆,這 不真的很重要,但是你只需要它在頂部一次,並且 也可以免除頂部的所有其他進口。

  • 您需要在equals函數中全球化op1

  • 您還沒有編寫用於分割,減除和乘以 按鈕的函數,那麼它們如何工作?當我嘗試9 - 6和命中等於我 得到一個NameError op1 is not defined它試圖等於東西,但 不能作爲減法按鈕不做任何事情。

  • 這意味着您只能從添加按鈕開始,所以我嘗試了5 + 4並且等於,其中 工作得很好,給了我9個,但是如果您嘗試從結果減去5,在文本框中輸入5,並在等於時再次添加5。

  • 當我嘗試從前面提到的9 - 6開始時,它將不起作用。爲了解決這個問題有多麼op1涉及到添加,並在equals功能op1以這樣的方式只會爲adding功能工作中使用你需要一個try/except循環:

    def equals(): 
        try: 
         v.set(int(op1)+int(v.get())) 
         v.get() 
         del op1 
        except NameError: 
         try: 
          # Whatever needs to be written for subtraction to work 
          # (using op2 as variable?) something like this: 
          v.set(int(op2)-int(v.get())) 
          v.get() 
          del op2 
         except NameError: 
          try: 
           # etc. etc. until you have done all four equals methods... 
    

    其中op2在組減去等功能

這應該給你一些幫助,以便能夠繼續,如果你想我可以解決方案適合你,但只有當你不想自己做呢?

+0

謝謝,這個建議不夠好。 – KhaganKhagan 2014-10-01 22:02:10

+0

其實,當我嘗試你的建議時,出現了很多意想不到的縮進錯誤。任何想法爲什麼? – KhaganKhagan 2014-10-01 22:11:43

+0

哪裏出現意想不到的縮進錯誤,我已經嘗試了我所說的並且工作正常,除了當您用零除錯誤時出現錯誤等小問題並嘗試使其失敗時,我得到了整個計算器的正常工作。 – W1ll1amvl 2014-10-01 22:23:33