首页 > 解决方案 > 使用 python tkinter 出现错误: int() 以 10 为基数的无效文字:''

问题描述

我正在使用 tkinter 并使用 get() 方法来获取用户输入的金额值。我有总成本,所以我必须通过简单的减法来计算变化,但是当我这样做时,错误就来了。请帮忙。这是我从中获取值的代码部分:

amount_entry = Entry(n, font=("arial", 15), width=20, bg="white", textvariable=input_text)
amount_entry.grid(row=1, column=1, padx=5, pady=10)
amount = input_text.get()

以下是之后产生错误的代码: change = int(amount) - tcost 只需保留上述代码部分即可。这是我的整个程序。

from tkinter import *
tcost = 0
change = -1
m = Tk()
m.title("Restaurant POS System")
def next():
    code = int(input_text1.get())
    qty = int(input_text2.get())
    global tcost
    global change
    if code == 1:
        tcost = tcost + (qty * 220)
    elif code == 2:
        tcost = tcost + (qty * 240)
    elif code == 3:
        tcost = tcost + (qty * 180)
    elif code == 4:
        tcost = tcost + (qty * 130)
    elif code == 5:
        tcost = tcost + (qty * 150)
    elif code == 6:
        tcost = tcost + (qty * 180)
    elif code == 7:
        tcost = tcost + (qty * 150)
    elif code == 8:
        tcost = tcost + (qty * 60)
    elif code == 9:
        tcost = tcost + (qty * 200)
    elif code == 10:
        tcost = tcost + (qty * 60)
    elif code == 11:
        tcost = tcost + (qty * 12)
    input_text1.set("")
    input_text2.set("")
def final():
    global amount
    change = int(amount) - tcost
    l = Tk()
    a = Label(l, text=("Amount paid:", amount), fg="black", bg="#eee", font=("calibri", 15)).grid(row=0, column=0, padx=5, pady=10)
    cost = Label(l, text=("Total Cost:", tcost), fg="black", bg="#eee", font=("calibri", 15)).grid(row=1, column=0, padx=5, pady=10)
    c = Label(l, text=("Change:", change), fg="black", bg="#eee", font=("calibri", 15)).grid(row=2, column=0, padx=5, pady=10)
    l.mainloop()
def calculate():
    global amount
    m.destroy()
    n = Tk()
    total = Label(n, text=str("Total Bill:" + str(tcost)), fg="black", bg="#eee", font=("calibri", 15)).grid(row=0, column=0, padx=5, pady=10)
    Amount = Label(n, text="Enter amount paid:", fg="black", bg="#eee", font=("calibri", 15)).grid(row=1, column=0, padx=5, pady=10)
    amount_entry = Entry(n, font=("arial", 15), width=20, bg="white", textvariable=input_text)
    amount_entry.grid(row=1, column=1, padx=5, pady=10)
    amount = amount_entry.get()
    process = Button(n, text="Process", fg="white", bg="black", font=("calibri", 15), width=10, height=2, cursor="hand2", command=final).grid(row=2, column=1, padx=5, pady=10)
    n.mainloop()
input_text1 = StringVar()
input_text2 = StringVar()
input_text = StringVar()
menu_frame = Frame(m, width=400, height=400,highlightbackground="black", highlightthickness=2)
menu_frame.pack(side=TOP)
input_frame = Frame(m, width=400, height=150, bg="silver")
input_frame.pack()
name = Label(menu_frame, text="WAH WAH RESTAURANT", font=("bebas neue", 26, "italic", "underline"), fg="indigo", justify=CENTER).grid(row=0, column=0, pady=10)
menu = Label(menu_frame, text="MENU", font=("arial black", 14), fg="black", justify=CENTER).grid(row=1, column=0, pady=5)
item1 = Label(menu_frame, text="1. Nihari -----------------------------------------------------------Rs.220/plate", fg="black", font=("arial", 12)).grid(row=2, column=0)
item2 = Label(menu_frame, text="2. Paaye  ---------------------------------------------------------Rs.240/plate", fg="black", font=("arial", 12)).grid(row=3, column=0)
item3 = Label(menu_frame, text="3. Haleem ---------------------------------------------------------Rs.180/plate", fg="black", font=("arial", 12)).grid(row=4, column=0)
item4 = Label(menu_frame, text="4. Chicken Tikka  -----------------------------------------------Rs.130/plate", fg="black", font=("arial", 12)).grid(row=5, column=0)
item5 = Label(menu_frame, text="5. Achar Gosht --------------------------------------------------Rs.150/plate", fg="black", font=("arial", 12)).grid(row=6, column=0)
item6 = Label(menu_frame, text="6. Beef Pulao ----------------------------------------------------Rs.180/plate", fg="black", font=("arial", 12)).grid(row=7, column=0)
item7 = Label(menu_frame, text="7. Chicken Biryani ----------------------------------------------Rs.150/plate", fg="black", font=("arial", 12)).grid(row=8, column=0)
item8 = Label(menu_frame, text="8. Shaami Kabaab -------------------------------------------Rs.60/kabaab", fg="black", font=("arial", 12)).grid(row=9, column=0)
item9 = Label(menu_frame, text="9. Palla Fish -----------------------------------------------------Rs.200/piece", fg="black", font=("arial", 12)).grid(row=10, column=0)
item10 = Label(menu_frame, text="10. Cold Drink(250ml) ------------------------------------------------Rs.60/-", fg="black", font=("arial", 12)).grid(row=11, column=0)
item11 = Label(menu_frame, text="11. Naan ------------------------------------------------------------------Rs.12/-", fg="black", font=("arial", 12)).grid(row=12, column=0)
code = Label(input_frame, text="Dish Code:", fg="black", bg="silver", font=("calibri", 15), justify=LEFT).grid(row=0, column=0,padx=5, pady=10)
dish_entry = Entry(input_frame, font=("arial", 15), width=20, bg="white", justify=RIGHT, textvariable=input_text1)
dish_entry.grid(row=0, column=1, padx=5, pady=10)
quantity = Label(input_frame, text="Quantity:", fg="black", bg="silver", font=("calibri", 15), justify=LEFT).grid(row=1, column=0,padx=5, pady=10)
qty_entry = Entry(input_frame, font=("arial", 15), width=20, bg="white", justify=RIGHT, textvariable=input_text2)
qty_entry.grid(row=1, column=1,padx=5, pady=10)
another = Button(input_frame, text="Order other item", width=12, height=2, bd=2, bg="black", fg="white", font=("arial", 10), cursor="hand2", command=next).grid(row=2, column=0, padx=10)
calc = Button(input_frame, text="Calculate", width=10, height=2, bd=2, bg="black", fg="white", font=("arial", 10), cursor="hand2", command=calculate).grid(row=2, column=1, padx=10)
m.mainloop()

标签: pythontkinter

解决方案


我通过定义input_text = StringVar()第二个 tkinter 循环而不是第一个循环来解决这个问题。

from tkinter import *
tcost = 0
change = -1
m = Tk()
m.title("Restaurant POS System")
def next():
    code = int(input_text1.get().strip())
    qty = int(input_text2.get().strip())

    global tcost
    global change
    if code == 1:
        tcost = tcost + (qty * 220)
    elif code == 2:
        tcost = tcost + (qty * 240)
    elif code == 3:
        tcost = tcost + (qty * 180)
    elif code == 4:
        tcost = tcost + (qty * 130)
    elif code == 5:
        tcost = tcost + (qty * 150)
    elif code == 6:
        tcost = tcost + (qty * 180)
    elif code == 7:
        tcost = tcost + (qty * 150)
    elif code == 8:
        tcost = tcost + (qty * 60)
    elif code == 9:
        tcost = tcost + (qty * 200)
    elif code == 10:
        tcost = tcost + (qty * 60)
    elif code == 11:
        tcost = tcost + (qty * 12)
    input_text1.set("")
    input_text2.set("")
def final():
    amount = input_text.get().strip()
    change = int(amount) - tcost
    l = Tk()
    a = Label(l, text=("Amount paid:", amount), fg="black", bg="#eee", font=("calibri", 15)).grid(row=0, column=0, padx=5, pady=10)
    cost = Label(l, text=("Total Cost:", tcost), fg="black", bg="#eee", font=("calibri", 15)).grid(row=1, column=0, padx=5, pady=10)
    c = Label(l, text=("Change:", change), fg="black", bg="#eee", font=("calibri", 15)).grid(row=2, column=0, padx=5, pady=10)
    l.mainloop()

def calculate():
    global input_text
    m.destroy()
    n = Tk()
    input_text = StringVar()  # definde There are the IntVar() too for integer values only maybe try them
    total = Label(n, text=str("Total Bill:" + str(tcost)), fg="black", bg="#eee", font=("calibri", 15)).grid(row=0, column=0, padx=5, pady=10)
    Amount = Label(n, text="Enter amount paid:", fg="black", bg="#eee", font=("calibri", 15)).grid(row=1, column=0, padx=5, pady=10)
    amount_entry = Entry(n, font=("arial", 15), width=20, bg="white", textvariable=input_text)
    amount_entry.grid(row=1, column=1, padx=5, pady=10)

    process = Button(n, text="Process", fg="white", bg="black", font=("calibri", 15), width=10, height=2, cursor="hand2", command=final).grid(row=2, column=1, padx=5, pady=10)
    n.mainloop()

input_text1 = StringVar()
input_text2 = StringVar()
input_text = None  # i define it in the calculate function

menu_frame = Frame(m, width=400, height=400,highlightbackground="black", highlightthickness=2)
menu_frame.pack(side=TOP)
input_frame = Frame(m, width=400, height=150, bg="silver")
input_frame.pack()
name = Label(menu_frame, text="WAH WAH RESTAURANT", font=("bebas neue", 26, "italic", "underline"), fg="indigo", justify=CENTER).grid(row=0, column=0, pady=10)
menu = Label(menu_frame, text="MENU", font=("arial black", 14), fg="black", justify=CENTER).grid(row=1, column=0, pady=5)
item1 = Label(menu_frame, text="1. Nihari -----------------------------------------------------------Rs.220/plate", fg="black", font=("arial", 12)).grid(row=2, column=0)
item2 = Label(menu_frame, text="2. Paaye  ---------------------------------------------------------Rs.240/plate", fg="black", font=("arial", 12)).grid(row=3, column=0)
item3 = Label(menu_frame, text="3. Haleem ---------------------------------------------------------Rs.180/plate", fg="black", font=("arial", 12)).grid(row=4, column=0)
item4 = Label(menu_frame, text="4. Chicken Tikka  -----------------------------------------------Rs.130/plate", fg="black", font=("arial", 12)).grid(row=5, column=0)
item5 = Label(menu_frame, text="5. Achar Gosht --------------------------------------------------Rs.150/plate", fg="black", font=("arial", 12)).grid(row=6, column=0)
item6 = Label(menu_frame, text="6. Beef Pulao ----------------------------------------------------Rs.180/plate", fg="black", font=("arial", 12)).grid(row=7, column=0)
item7 = Label(menu_frame, text="7. Chicken Biryani ----------------------------------------------Rs.150/plate", fg="black", font=("arial", 12)).grid(row=8, column=0)
item8 = Label(menu_frame, text="8. Shaami Kabaab -------------------------------------------Rs.60/kabaab", fg="black", font=("arial", 12)).grid(row=9, column=0)
item9 = Label(menu_frame, text="9. Palla Fish -----------------------------------------------------Rs.200/piece", fg="black", font=("arial", 12)).grid(row=10, column=0)
item10 = Label(menu_frame, text="10. Cold Drink(250ml) ------------------------------------------------Rs.60/-", fg="black", font=("arial", 12)).grid(row=11, column=0)
item11 = Label(menu_frame, text="11. Naan ------------------------------------------------------------------Rs.12/-", fg="black", font=("arial", 12)).grid(row=12, column=0)
code = Label(input_frame, text="Dish Code:", fg="black", bg="silver", font=("calibri", 15), justify=LEFT).grid(row=0, column=0,padx=5, pady=10)
dish_entry = Entry(input_frame, font=("arial", 15), width=20, bg="white", justify=RIGHT, textvariable=input_text1)
dish_entry.grid(row=0, column=1, padx=5, pady=10)
quantity = Label(input_frame, text="Quantity:", fg="black", bg="silver", font=("calibri", 15), justify=LEFT).grid(row=1, column=0,padx=5, pady=10)
qty_entry = Entry(input_frame, font=("arial", 15), width=20, bg="white", justify=RIGHT, textvariable=input_text2)
qty_entry.grid(row=1, column=1,padx=5, pady=10)
another = Button(input_frame, text="Order other item", width=12, height=2, bd=2, bg="black", fg="white", font=("arial", 10), cursor="hand2", command=next).grid(row=2, column=0, padx=10)
calc = Button(input_frame, text="Calculate", width=10, height=2, bd=2, bg="black", fg="white", font=("arial", 10), cursor="hand2", command=calculate).grid(row=2, column=1, padx=10)
m.mainloop()

推荐阅读