Python错误弹出不起作用

时间:2015-04-26 01:15:55

标签: python-2.7 exception try-except

编写代码并且我以某种方式打破它并且不记得以前工作的东西,只使用了几周的python并且在整天工作之后,我有点沮丧......

# A program to calculate delivery order totals

from graphics import *

#Error Window
def errorWindow():
errwin = GraphWin("Error", 200, 200)
errwin.setCoords(0.0, 0.0, 4.0, 4.0)
errwin.setBackground(color_rgb(33,158,87))
Text(Point(2, 3), "This is not a valid order").draw(errwin)
Text(Point(2, 2.5), "Please try again").draw(errwin)
outline = Rectangle(Point(1.5,1), Point(2.5,2))
outline.setFill('white')
outline.draw(errwin)
okbutton = Text(Point(2,1.5),"OK")
okbutton.draw(errwin)
done=errwin.getMouse()
if (done.getX() > 1.5 and done.getX() < 2.5):
    errwin.close()

def main():    
    win = GraphWin("Brandi's Bagel House", 500, 500)
    win.setCoords(0.0, 0.0, 10.0, 10.0)
    win.setBackground(color_rgb(33,158,87))

#Banner
    banner = Rectangle(Point(0, 8), Point(10, 10))
    banner.setFill(color_rgb(97,76,26))
    banner.setOutline(color_rgb(97,76,26))
    banner.draw(win)

#Logo Image
    circ = Circle(Point(1,9), .65)
    circ.setFill('white')
    circ.setOutline('white')
    circ.draw(win)

    circ2 = Circle(Point(1,9), .6)
    circ2.setFill(color_rgb(33,158,87))
    circ2.setOutline(color_rgb(33,158,87))
    circ2.draw(win)

    bigb = Text(Point(1, 9),"B")
    bigb.setStyle('bold italic')
    bigb.setTextColor('white')
    bigb.setFace('courier')
    bigb.setSize(28)
    bigb.draw(win)

#Horizontal Lines
    Line(Point(0,2.25), Point(10,2.25)).draw(win)
    Line(Point(0,4.25), Point(10,4.25)).draw(win)
    Line(Point(0,6.25), Point(10,6.25)).draw(win)

#Text
    title = Text(Point(4,9), "Delivery Orders:")
    title.setSize(20)
    title.setTextColor('white')
    title.draw(win)

    Text(Point(1.5,7), "Bagels:").draw(win)

    whitetext = Text(Point(3,7.5), "White")
    whitetext.setSize(10)
    whitetext.draw(win)

    wheattext = Text(Point(5,7.5), "Wheat")
    wheattext.setSize(10)
    wheattext.draw(win)

    Text(Point(1.5,5), "Toppings:").draw(win)

    creamtext = Text(Point(3,5.8), "Cream")
    creamtext.setSize(10)
    creamtext.draw(win)

    cheesetext = Text(Point(3,5.5), "Cheese")
    cheesetext.setSize(10)
    cheesetext.draw(win)

    buttertext = Text(Point(5,5.5), "Butter")
    buttertext.setSize(10)
    buttertext.draw(win)

    jellytext = Text(Point(7,5.5), "Jelly")
    jellytext.setSize(10)
    jellytext.draw(win)

    Text(Point(1.5,3), "Coffee:").draw(win)

    regtext = Text(Point(3,3.5), "Regular")
    regtext.setSize(10)
    regtext.draw(win)

    decaftext = Text(Point(5,3.5), "Decaf")
    decaftext.setSize(10)
    decaftext.draw(win)

    Text(Point(7,1.5), "Subtotal:").draw(win)
    Text(Point(7,1), "Tax:").draw(win)
    Text(Point(7,0.5), "Total:").draw(win)

#input bagel
    bagel1 = Entry(Point(3,7), 3)
    bagel1.setText("0")
    bagel1.draw(win)

    bagel2 = Entry(Point(5,7), 3)
    bagel2.setText("0")
    bagel2.draw(win)

#input topping
    top1 = Entry(Point(3,5), 3)
    top1.setText("0")
    top1.draw(win)

    top2 = Entry(Point(5,5), 3)
    top2.setText("0")
    top2.draw(win)

    top3 = Entry(Point(7,5), 3)
    top3.setText("0")
    top3.draw(win)

#input coffee

    coff1 = Entry(Point(3,3), 3)
    coff1.setText("0")
    coff1.draw(win)

    coff2 = Entry(Point(5,3), 3)
    coff2.setText("0")
    coff2.draw(win)

#Calculate Button
    outer1 = Rectangle(Point(4.2,0.6), Point(5.8,1.4))
    outer1.setFill('white')
    outer1.draw(win)
    button = Text(Point(5,1),"Calculate")
    button.draw(win)

#Quit Buttons
    outer2 = Rectangle(Point(9,9.2), Point(9.95,9.95))
    outer2.setFill('white')
    outer2.draw(win)
    button = Text(Point(9.5,9.6),"Quit")
    button.draw(win)

#Output
    subtotaloutput = Text(Point(9,1.5), "$0.00")
    subtotaloutput.draw(win)

    taxoutput = Text(Point(9,1), "$0.00")
    taxoutput.draw(win)

    totaloutput = Text(Point(9,0.5), "$0.00")
    totaloutput.draw(win)

#calculations
    whitebagel = eval(bagel1.getText())
    whitetotal = whitebagel* 1.25

    wheatbagel = eval(bagel2.getText())
    wheattotal = wheatbagel*1.50

    creamcheese = eval(top1.getText())
    creamtotal = creamcheese* 0.50

    butter = eval(top2.getText())
    buttertotal = butter*0.25

    jelly = eval(top3.getText())
    jellytotal = jelly*0.75

    regularcoff = eval(coff1.getText())
    regulartotal = regularcoff*1.25

    decafcoff = eval(coff2.getText())
    decaftotal = decafcoff*1.25

    click = win.getMouse()

    if (click.getX() > 4.2 and click.getX() < 5.8 and (whitebagel >0 or wheatbagel >0)):

        subtotal = whitetotal+wheattotal+creamtotal+buttertotal+jellytotal+regulartotal+decaftotal
        tax = .06
        taxes = subtotal*tax
        total = taxes+subtotal

        subtotal = "$%0.2f" % (subtotal)
        taxes = "$%0.2f" % (taxes)
        total = "$%0.2f" % (total)

        subtotaloutput.setText(subtotal)
        taxoutput.setText(taxes)
        totaloutput.setText(total)

        #Coffee Cup Image
        bottomoval = Oval(Point(0.7,0.4), Point(1.4, 0.7))
        bottomoval.setFill(color_rgb(97,76,26))
        bottomoval.setOutline(color_rgb(97,76,26))
        bottomoval.draw(win)

        cup = Rectangle(Point(0.7,0.5), Point(1.4,1.3))
        cup.setFill(color_rgb(97,76,26))
        cup.setOutline(color_rgb(97,76,26))
        cup.draw(win)

        topoval = Oval(Point(0.6,1.2), Point(1.5, 1.5))
        topoval.setFill('white')
        topoval.setOutline(color_rgb(97,76,26))
        topoval.draw(win)

        coffee = Oval(Point(0.7,1.26), Point(1.4, 1.45))
        coffee.setFill(color_rgb(71,54,14))
        coffee.setOutline(color_rgb(71,54,14))
        coffee.draw(win)

        tinycirc = Circle(Point(1.05,0.8), .3)
        tinycirc.setFill(color_rgb(33,158,87))
        tinycirc.setOutline('white')
        tinycirc.draw(win)

        letter = Text(Point(1.05,0.8),"B")
        letter.setStyle('bold italic')
        letter.setTextColor('white')
        letter.setFace('courier')
        letter.setSize(17)
        letter.draw(win)

        #Bagel
        outerbagel = Oval(Point(1.8, 0.4), Point(2.7, 1))
        outerbagel.setFill(color_rgb(191,157,61))
        outerbagel.draw(win)

        shadow = Oval(Point(2.1, 0.7), Point(2.4, 0.8))
        shadow.setFill(color_rgb(130,102,26))
        shadow.draw(win)

    elif(click.getX() > 4.2 and click.getX() < 5.8 and whitebagel <1 and wheatbagel <1):
        errorWindow()

#End
    point = win.getMouse()
    if (point.getX() > 9 and point.getX() < 9.95):
        win.close()

main()

如果未通过订单选择百吉饼,我需要一个错误窗口弹出,因为这个示例咖啡和浇头在没有百吉饼的情况下无法交付。我想我以前曾经尝试过这个/但是现在我也无法让它工作。要么它不会计算总数并弹出或计算但仍会弹出错误,或者没有任何反应!关闭弹出窗口后,我似乎也找不到任何方向,回到功能正常的主窗口。当我关闭错误窗口时,主窗口不再起作用。我希望能够做到这一点。最后我不能使用tkinter,只能使用graphics.py。如果有任何粗暴的事情,我也会道歉,到目前为止,这是我所知道的唯一方式。提前感谢任何建议。

我仍然希望有人会怜悯我并给我一些方向,告诉我这个代码出错的地方......我已经改变了我遇到问题的部分,但它仍然无效:< / p>

   try:
    click = win.getMouse()

    if click.getX() > 4.2 and click.getX() < 5.8 and whitebagel >0 and wheatbagel >0:

        subtotal = whitetotal+wheattotal+creamtotal+buttertotal+jellytotal+regulartotal+decaftotal
        tax = .06
        taxes = subtotal*tax
        total = taxes+subtotal

        subtotal = "$%0.2f" % (subtotal)
        taxes = "$%0.2f" % (taxes)
        total = "$%0.2f" % (total)

        subtotaloutput.setText(subtotal)
        taxoutput.setText(taxes)
        totaloutput.setText(total)

        #Coffee Cup Image
        bottomoval = Oval(Point(0.7,0.4), Point(1.4, 0.7))
        bottomoval.setFill(color_rgb(97,76,26))
        bottomoval.setOutline(color_rgb(97,76,26))
        bottomoval.draw(win)

        cup = Rectangle(Point(0.7,0.5), Point(1.4,1.3))
        cup.setFill(color_rgb(97,76,26))
        cup.setOutline(color_rgb(97,76,26))
        cup.draw(win)

        topoval = Oval(Point(0.6,1.2), Point(1.5, 1.5))
        topoval.setFill('white')
        topoval.setOutline(color_rgb(97,76,26))
        topoval.draw(win)

        coffee = Oval(Point(0.7,1.26), Point(1.4, 1.45))
        coffee.setFill(color_rgb(71,54,14))
        coffee.setOutline(color_rgb(71,54,14))
        coffee.draw(win)

        tinycirc = Circle(Point(1.05,0.8), .3)
        tinycirc.setFill(color_rgb(33,158,87))
        tinycirc.setOutline('white')
        tinycirc.draw(win)

        letter = Text(Point(1.05,0.8),"B")
        letter.setStyle('bold italic')
        letter.setTextColor('white')
        letter.setFace('courier')
        letter.setSize(17)
        letter.draw(win)

        #Bagel
        outerbagel = Oval(Point(1.8, 0.4), Point(2.7, 1))
        outerbagel.setFill(color_rgb(191,157,61))
        outerbagel.draw(win)

        shadow = Oval(Point(2.1, 0.7), Point(2.4, 0.8))
        shadow.setFill(color_rgb(130,102,26))
        shadow.draw(win)

except:
    errorWindow()

我觉得我在这里失去了理智,因为我一直试图让这个工作起来......

1 个答案:

答案 0 :(得分:0)

首先,tkinter不适合使用图形。它有点陈旧,很多概念都不会变得便携。如果没有其他选择,请再次使用它......

其次,ErrorWindow的代码没有正确缩进。如果是,我至少会弹出一个错误。可能没有处于正确的错误状态。

第三,我也会对点击的Y坐标进行某种检查,因为您可以通过单击其垂直列中的任意位置来触发“计算”按钮,例如小麦文本框。

通常使用GUI,可以使用某种事件循环来处理多次点击。类似的东西:

while(True):
   click = win.getMouse()
   if calculate button:
       get text values
       if not bagels:
           errorWindow()
           continue
       calculate
   elif quit button:
       break

我做了一个修改过的版本,它有一个以这种方式构建的事件循环,我得到了它给出了多个总数,以及当我没有百吉饼订单然后继续进行时发出错误。