2014-10-01 43 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