Python 用TKinter计算场

Python 用TKinter计算场,python,tkinter,sqlite,calculated-field,Python,Tkinter,Sqlite,Calculated Field,我用的是Tkinter。我想从价格和数量中计算出总价,但这不起作用 def adding(self): if self.validation(): query = 'INSERT INTO products VALUES (?,?,?,?,?)' parameters = (self.name.get(), self.price.get(), self.price.get() * self.quantity.get() ,self.quantity

我用的是Tkinter。我想从价格和数量中计算出总价,但这不起作用

    def adding(self):
    if self.validation():
        query = 'INSERT INTO products VALUES (?,?,?,?,?)'
        parameters = (self.name.get(), self.price.get(), self.price.get() * self.quantity.get() ,self.quantity.get(),self.date.get())
        self.run_query(query,parameters)
        self.message['text']= 'Record {} added'.format (self.name.get())
        self.message['text'] = 'Record {} added'.format(self.price.get())
        self.message['text'] = 'Record {} added'.format(self.quantity.get())
        self.message['text'] = 'Record {} added'.format(self.quantity.get() * self.price.get())
        self.message['text'] = 'Record {} added'.format(self.date.get())

        self.name.delete(0, END)
        self.price.delete(0, END)
        self.quantity.delete(0, END)
        self.date.delete(0, END)
    else:
        self.message['text'] = 'name field or price is empty'
        self.viewing_records()
我犯了一个错误:

Tkinter回调中的异常 回溯(最近一次呼叫最后一次): 文件“C:\Users\me\AppData\Local\Programs\Python35-32\lib\tkinter\uuuu init\uuuuu.py”,第1550行,在调用中 返回self.func(*args) 文件“C:/Users/me/PycharmProjects/crawler/db.py”,第78行,添加 参数=(self.name.get()、self.price.get()、self.price.get()*self.quantity.get()、self.quantity.get()、self.date.get()) TypeError:无法将序列与'str'类型的非int相乘

您能帮我一下吗,这些数据存储在sqlite3表中,当您使用
get()
时,它将始终返回一个字符串。因此,您需要将该字符串转换为数字,以便执行任何数学运算。我们可以使用
int()
float()
Int()
仅适用于整数,而
float()
将适用于包含小数点或整数的数字

处理可能出现的错误的一种方法是使用
try/except
方法。 我们首先告诉python尝试进行计算,因为我们需要一个数字,但是如果我们得到的不是一个数字,那么就会产生一条错误消息

请参阅下面的代码示例,将一个数字自身相乘以获得结果

import tkinter as tk


root = tk.Tk()

my_entry = tk.Entry(root)
my_entry.pack()
my_label = tk.Label(root, text="Results:")
my_label.pack()

def do_math():
    try:
        x = int(my_entry.get())
        my_label.config(text="Results: {}".format(x * x))

    except:
        my_label.config(text="Results: Error: Blank or non int provided")

btn = tk.Button(root, text="Submit", command=do_math)
btn.pack()

root.mainloop()

还有其他处理插补值的方法,例如通过使用验证函数强制输入字段仅接受数字和小数点。在执行任何数学运算之前,我们可以创建一个复杂的函数来检查值是整数还是浮点。但是,对于这样一个简单的数学问题来说,这其中的大部分都是不需要的。

当您在entry小部件上调用
get()
时,您将返回一个字符串而不是一个数字。您需要使用
int()
get()
返回的字符串转换为整数。您还需要确保
get()
返回的字符串值始终是一个数字,否则
int()
将导致错误。这里的内容不会在您的帖子中产生错误谢谢您,它现在工作正常