用TKinter计算字段

时间:2018-03-21 13:44:37

标签: 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.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回调中的异常   Traceback(最近一次调用最后一次):     文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ tkinter__init __。py",第1550行,调用       return self.func(* args)     文件" C:/Users/me/PycharmProjects/crawler/db.py",第78行,添加       parameters =(self.name.get(),self.price.get(),self.price.get()* self.quantity.get(),self.quantity.get(),self.date.get() )   TypeError:不能将序列乘以类型' str'

的非int

你可以帮我吗,这个数据存储在sqlite3表中

1 个答案:

答案 0 :(得分:0)

当您使用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()

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