在python tkinter计算器中清除按钮退格 [英] Make clear button backspace by one in python tkinter calculator

查看:548
本文介绍了在python tkinter计算器中清除按钮退格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用tkinter在python做一个计算器。除了一件事,计算器工作得很好。此刻,我已经设置计算器清除显示。我想让它清除显示屏上的最后一个数字。例如564将变为56.



任何帮助非常感激。

  #Import tkinter 
from Tkinter import *
#Setup退出按钮
def quit():
window.destroy()

def buttonclick(event):
全局计算
全局保存值
全局运算符
按下=
如果event.x> 10和事件。 x <70和event.y> 50和event.y& 110:pressed = 7
if event.x> 10和event.x< 70并且event.y> 120和event.y& 180:pressed = 4
如果event.x> 10且event.x< 70且event.y> 190和event.y& 250:pressed = 1
如果event.x> 10和event.x< 70并且event.y> 260和event.y& 320:pressed = 0
如果event.x> 80且event.x< 140且event.y> 50和event.y& 110:pressed = 8
如果event.x> 80且event.x< 140且event.y> 120和event.y& 180:pressed = 5
如果event.x> 80且event.x< 140且event.y> 190和event.y& 250:pressed = 2
如果event.x> 150且event.x< 210且event.y> 50和event.y& 110:pressed = 9
如果event.x> 150且event.x< 210且event.y> 120和event.y& 180:pressed = 6
如果event.x> 150且event.x< 210且event.y> 190和event.y& 250:pressed = 3
如果event.x> 80且event.x< 140且event.y> 260和event.y& 320:pressed =等于
如果event.x> 150且event.x< 210且event.y> 260和event.y& 320:pressed =clear
如果event.x> 220且event.x< 280且event.y> 50和event.y& 110:pressed =divide
如果event.x> 220且event.x< 280且event.y> 120和event.y& 180:pressed =times
if event.x> 220和event.x< 280 and event.y> 190和event.y& 250:pressed =minus
如果event.x> 220和event.x< 280并且event.y> 260和event.y& 320:pressed =plus


如果按下== 0或按下== 1或按下== 2或按下== 3或按下== 4或按下== 5按下== 6或按下== 7或按下== 8或按下== 9:
calcvalue = calcvalue * 10 +按下


如果按下==或按下==times或按下==减或按下==plus:
operator = pressed
savedvalue = calcvalue
calcvalue = 0
$ b b如果按了==equals:
如果operator ==divide:calcvalue = savedvalue / calcvalue
如果operator ==times:calcvalue = savedvalue * calcvalue
如果operator = =minus:calcvalue = savedvalue - calcvalue
如果operator ==plus:calcvalue = savedvalue + calcvalue

如果按下==clear:
calcvalue = 0

displayupdate()
canvas.update()

#设置显示
def displayupdate():
canvas.create_rectangle ,10,370,40,fill =white,outline =black)
canvas.create_text(350,25,text = calcvalue,font =Times 20 bold,anchor = E)

#设置画布/窗口
def main():
全局窗口
全局tkinter
全局画布
window = Tk()
window.title(BIG Calculator)
Button(window,text =Quit,width = 5,command = quit) height = 330,bg ='black')
canvas.bind(< Button-1>,buttonclick)

#Add 1 2 3 4 5 6 7 8 9 0按钮
canvas.create_rectangle(10,50,100,110,fill =white,outline =black)
canvas.create_text(45,80,text =7,font = Times 30 bold)

canvas.create_rectangle(10,120,100,180,fill =white,outline =black)
canvas.create_text(45,150,text =4,font =Times 30 bold)

canvas.create_rectangle(10,190,100,250,fill =white,outline =black)
canvas .create_text(45,220,text =1,font =Times 30 bold)

canvas.create_rectangle(10,260,100,320,fill =white,outline =黑色)
canvas.create_text(45,290,text =0,font =Times 30 bold)

canvas.create_rectangle(80,50,170,110,fill =white,outline =black)
canvas.create_text(115,80,text =8,font =Times 30 bold)

canvas.create_rectangle ,120,170,180,fill =white,outline =black)
canvas.create_text(115,150,text =5,font =Times 30 bold)

canvas.create_rectangle(80,190,170,250,fill =white,outline =black)
canvas.create_text(115,220,text =2,font =粗体)

canvas.create_rectangle(150,50,240,110,fill =white,outline =black)
canvas.create_text(185,80,text = 9,font =Times 30 bold)

canvas.create_rectangle(150,120,240,180,fill =white,outline =black)
canvas.create_text (185,150,text =6,font =Times 30 bold)

canvas.create_rectangle(150,190,240,250,fill =white,outline =black )
canvas.create_text(185,220,text =3,font =Times 30 bold)

#SHow the = c + - x / buttons
canvas .create_rectangle(80,260,170,320,fill =white,outline =black)
canvas.create_text(115,290,text ==,font =Times 30 bold)

canvas.create_rectangle(150,260,240,320,fill =white,outline =black)
canvas.create_text(185,290,text =C =Times 30 bold)

canvas.create_rectangle(220,50,370,110,fill =white,outline =black)
canvas.create_text ,text =Divide,font =Times 30 bold)

canvas.create_rectangle(220,120,370,180,fill =white,outline =black)
canvas.create_text(295,150,text =Times,font =Times 30 bold)

canvas.create_rectangle(220,190,370,250,fill =white =black)
canvas.create_text(295,220,text =Minus,font =Times 30 bold)

canvas.create_rectangle(220,260,370,320 ,fill =white,outline =black)
canvas.create_text(295,290,text =Plus,font =Times 30 bold)

整个计算器工作
canvas.create_rectangle(10,10,280,40,fill =white,outline =black)
全局calcvalue
calcvalue = 0
displayupdate )

canvas.pack()
window.mainloop()





$ b b
main()


解决方案

得到ValueError,因为您尝试在

中执行 int(clear)

  if pressed ==clear:calcvalue = calcvalue  -  int(pressed)/ 10 

执行以下操作:

  if pressed ==clear:calcvalue = int(calcvalue / 10.0)

因为你只使用整数并且使用Python 2.x,你甚至可以这样做:

  if pressed ==clear:calcvalue = calcvalue / 10 

在Python 2.x中:




  • 整数/整数始终整数

  • float / integer integer / float 给予 float



Python 3.x:




  • 整数/整数总是 float

  • 整数//整数总是整数






顺便说一下:



您可以:

  if event.x> 10 and event.x< 70 .. 。

更换为:

 如果10 < event.x <70 ... 

而且:

 如果按下== 0或按下== 1或按下== 2或按下== 3或按下== 4或按下== 5或按下== 6或按下== 7或按下== 8或按下== 9:

如果按下==divide或按下==times或按下==minus或按下==加上:

 如果按下(0,1,2,3,4,5,6,7,8,9):

如果按times,minus,plus):

>

I am making a calculator in python using tkinter. The calculator works very well apart from one thing. At the moment I have set the calculator to clear the display. I want to make it so that it clears the last number on the display. For example 564 would become 56.

Any help greatly appreciated.

#Import tkinter
from Tkinter import *
#Setup quit button
def quit():
    window.destroy()
#What happens when you click the button
def buttonclick(event):
    global calcvalue
    global savedvalue
    global operator
    pressed = ""
    if event.x >10 and event.x <70 and event.y > 50 and event.y < 110 : pressed = 7
    if event.x >10 and event.x <70 and event.y > 120 and event.y < 180 : pressed = 4
    if event.x >10 and event.x <70 and event.y > 190 and event.y < 250 : pressed = 1
    if event.x >10 and event.x <70 and event.y > 260 and event.y < 320 : pressed = 0
    if event.x >80 and event.x <140 and event.y > 50 and event.y < 110 : pressed = 8
    if event.x >80 and event.x <140 and event.y > 120 and event.y < 180 : pressed = 5
    if event.x >80 and event.x <140 and event.y > 190 and event.y < 250 : pressed = 2
    if event.x >150 and event.x <210 and event.y > 50 and event.y < 110 : pressed = 9
    if event.x >150 and event.x <210 and event.y > 120 and event.y < 180 : pressed = 6
    if event.x >150 and event.x <210 and event.y > 190 and event.y < 250 : pressed = 3
    if event.x >80 and event.x <140 and event.y > 260 and event.y < 320 : pressed = "equals"
    if event.x >150 and event.x <210 and event.y > 260 and event.y < 320 : pressed = "clear"
    if event.x >220 and event.x <280 and event.y > 50 and event.y < 110 : pressed = "divide"
    if event.x >220 and event.x <280 and event.y > 120 and event.y < 180 : pressed = "times"
    if event.x >220 and event.x <280 and event.y > 190 and event.y < 250 : pressed = "minus"
    if event.x >220 and event.x <280 and event.y > 260 and event.y < 320 : pressed = "plus"


    if pressed == 0 or pressed == 1 or pressed == 2 or pressed == 3 or pressed == 4 or pressed == 5 or pressed == 6 or pressed == 7 or pressed == 8 or pressed == 9 :
        calcvalue = calcvalue * 10 + pressed


    if pressed == "divide" or pressed == "times" or pressed == "minus" or pressed == "plus" :
        operator = pressed
        savedvalue = calcvalue
        calcvalue = 0

    if pressed == "equals":
        if operator == "divide": calcvalue =  savedvalue /calcvalue
        if operator == "times": calcvalue =  savedvalue * calcvalue
        if operator == "minus": calcvalue =  savedvalue - calcvalue
        if operator == "plus": calcvalue =  savedvalue + calcvalue

    if pressed == "clear":
        calcvalue = 0

    displayupdate()
    canvas.update()

#Setup the display
def displayupdate():
    canvas.create_rectangle(10, 10, 370, 40, fill="white", outline="black")
    canvas.create_text(350, 25,  text=calcvalue,font="Times 20  bold",anchor=E)

#Setup the canvas/window
def main():
    global window
    global tkinter
    global canvas
    window = Tk()
    window.title("BIG Calculator")
    Button(window, text="Quit",  width=5, command=quit).pack()
    canvas = Canvas(window, width= 380, height=330, bg = 'black')
    canvas.bind("<Button-1>", buttonclick)

#Add the 1 2 3 4 5 6 7 8 9 0 buttons
    canvas.create_rectangle(10, 50, 100, 110, fill="white", outline="black")
    canvas.create_text(45, 80,  text="7",font="Times 30  bold")

    canvas.create_rectangle(10, 120, 100, 180, fill="white", outline="black")
    canvas.create_text(45, 150,  text="4",font="Times 30  bold")

    canvas.create_rectangle(10, 190, 100, 250, fill="white", outline="black")
    canvas.create_text(45, 220,  text="1",font="Times 30  bold")

    canvas.create_rectangle(10, 260, 100, 320, fill="white", outline="black")
    canvas.create_text(45, 290,  text="0",font="Times 30  bold")

    canvas.create_rectangle(80, 50, 170, 110, fill="white", outline="black")
    canvas.create_text(115, 80,  text="8",font="Times 30  bold")

    canvas.create_rectangle(80, 120, 170, 180, fill="white", outline="black")
    canvas.create_text(115, 150,  text="5",font="Times 30  bold")

    canvas.create_rectangle(80, 190, 170, 250, fill="white", outline="black")
    canvas.create_text(115, 220,  text="2",font="Times 30  bold")

    canvas.create_rectangle(150, 50, 240, 110, fill="white", outline="black")
    canvas.create_text(185, 80,  text="9",font="Times 30  bold")

    canvas.create_rectangle(150, 120, 240, 180, fill="white", outline="black")
    canvas.create_text(185, 150,  text="6",font="Times 30  bold")

    canvas.create_rectangle(150, 190, 240, 250, fill="white", outline="black")
    canvas.create_text(185, 220,  text="3",font="Times 30  bold")

#SHow the = c + - x / buttons
    canvas.create_rectangle(80, 260, 170, 320, fill="white", outline="black")
    canvas.create_text(115, 290,  text="=",font="Times 30  bold")

    canvas.create_rectangle(150, 260, 240, 320, fill="white", outline="black")
    canvas.create_text(185, 290,  text="C",font="Times 30  bold")

    canvas.create_rectangle(220, 50, 370, 110, fill="white", outline="black")
    canvas.create_text(295, 80,  text="Divide",font="Times 30  bold")

    canvas.create_rectangle(220, 120, 370, 180, fill="white", outline="black")
    canvas.create_text(295, 150,  text="Times",font="Times 30  bold")

    canvas.create_rectangle(220, 190, 370, 250, fill="white", outline="black")
    canvas.create_text(295, 220,  text="Minus",font="Times 30  bold")

    canvas.create_rectangle(220, 260, 370, 320, fill="white", outline="black")
    canvas.create_text(295, 290,  text="Plus",font="Times 30  bold")

#Make the whole calculator work
    canvas.create_rectangle(10, 10, 280, 40, fill="white", outline="black")
    global calcvalue
    calcvalue = 0
    displayupdate()

    canvas.pack()
    window.mainloop()







main()

解决方案

Briefly: you get ValueError because you try to do int("clear") in

if pressed == "clear": calcvalue = calcvalue - int(pressed) / 10

You can do this:

if pressed == "clear": calcvalue = int(calcvalue/10.0)

Because you work only with integers and you use Python 2.x you can do even this:

if pressed == "clear": calcvalue = calcvalue/10

In Python 2.x:

  • integer/integer gives always integer
  • float/integer and integer/float gives float

In Python 3.x:

  • integer/integer gives always float
  • integer//integer gives always integer

By the way:

You can this:

if event.x >10 and event.x <70 ...

replace with this:

if 10< event.x <70 ...

And this:

if pressed == 0 or pressed == 1 or pressed == 2 or pressed == 3 or pressed == 4 or pressed == 5 or pressed == 6 or pressed == 7 or pressed == 8 or pressed == 9 :

if pressed == "divide" or pressed == "times" or pressed == "minus" or pressed == "plus" :

with this:

if pressed in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9):

if pressed in ("divide", "times", "minus", "plus"):

It is more readable.

这篇关于在python tkinter计算器中清除按钮退格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆