【问题标题】:calculated field with TKinter使用 TKinter 计算的字段
【发布时间】:2018-03-21 13:44:36
【问题描述】:

我正在使用 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\Python\Python35-32\lib\tkinter__init__.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”类型的非整数

你能帮我吗,这些数据存储在 sqlite3 表中

【问题讨论】:

  • 当您在条目小部件上调用get() 时,您将得到一个字符串而不是一个数字。
  • 您需要使用int()get() 返回的字符串转换为整数。您还需要确保get() 返回的字符串值始终是数字,否则int() 将导致错误。
  • 您在这里所拥有的不会在您的帖子中产生错误

标签: python tkinter sqlite calculated-field


【解决方案1】:

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

还有其他方法可以处理估算值,例如通过使用验证函数强制输入字段仅接受数字和小数点。我们可以创建一个复杂的函数来检查值是整数还是浮点数,然后再执行任何数学运算。不过,对于这样一个简单的数学问题,其中大部分内容已经超出了我们的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多