鱼C论坛

 找回密码
 立即注册
查看: 1218|回复: 6

tkinter的StringVar() 计算的问题。

[复制链接]
发表于 2021-12-10 17:20:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
诸位:
我要做一个图面显示程序:

       一共三个Entry,前两个输入数量和价格,将总价自动显示在第三个Entery里
        要用到变量,所以三个Entry都定义了一个StringVar()
        我设计了Callback函数,只要第一个StrintVar动,就执行这个函数。开始运算。


但为什么我的程序出现TypeError: can't multiply sequence by non-int of type 'str' 报错呢?

def callback(*args):
   
    #执行这个函数后,将evar1得到的数和evar2得到得数相乘,再evar3.set设置一下。
    evar3.set(evar1.get()*evar2.get())


lab1=Label(root,text='成本').grid(row=0,column=0)
evar1=StringVar()
e1=Entry(root,textvariable=evar1,bg='lightblue')
e1.grid(row=1,column=1,padx=5,pady=5)
evar1.trace('w',callback)       #e1这个Entry有输入,就执行这个函数

lab2=Label(root,text='数量').grid(row=0,column=2)
evar2=StringVar()
e2=Entry(root,textvariable=evar2,bg='lightblue')
e2.grid(row=1,column=2,padx=5,pady=5)

lab3=Label(root,text='总价').grid(row=0,column=3)
evar3=StringVar()
e3=Entry(root,textvariable=evar3,bg='lightblue')
e3.grid(row=1,column=3,padx=5,pady=5)


root.mainloop()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-10 17:21:04 | 显示全部楼层
from tkinter import *
root=Tk()
root.geometry('500x200')

def callback(*args):

    #执行这个函数后,将evar1得到的数和evar2得到得数相乘,再evar3.set设置一下。
    evar3.set(int(evar1.get())*int(evar2.get()))
    #将函数部分用int转化了下,但报错变成了:ValueError: invalid literal for int() with base 10: ''


lab1=Label(root,text='成本').grid(row=0,column=0)
evar1=StringVar()
e1=Entry(root,textvariable=evar1,bg='lightblue')
e1.grid(row=1,column=1,padx=5,pady=5)
evar1.trace('w',callback)       #e1这个Entry有输入,就执行这个函数

lab2=Label(root,text='数量').grid(row=0,column=2)
evar2=StringVar()
e2=Entry(root,textvariable=evar2,bg='lightblue')
e2.grid(row=1,column=2,padx=5,pady=5)

lab3=Label(root,text='总价').grid(row=0,column=3)
evar3=StringVar()
e3=Entry(root,textvariable=evar3,bg='lightblue')
e3.grid(row=1,column=3,padx=5,pady=5)


root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-10 18:31:59 | 显示全部楼层
为什么不加多一个按钮?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-10 18:33:15 | 显示全部楼层
我帮你重新编写了:(多了个按钮功能)
from tkinter import *

root = Tk()
costLabel = Label(root, text = "成本").grid(row = 0, column = 0)
qtyLabel = Label(root, text = "数量").grid(row = 0, column = 1)
totalLabel = Label(root, text = "总价").grid(row = 0, column = 2)

costBox = Entry(root, width = 30, bg = '#00ffff', borderwidth = 5)
costBox.grid(row = 1, column = 0, padx = 5, pady = 5)

qtyBox = Entry(root, width = 30, bg = '#00ffff', borderwidth = 5)
qtyBox.grid(row = 1, column = 1, padx = 5, pady = 5)

totalBox = Entry(root, width = 30, bg = '#00ffff', borderwidth = 5)
totalBox.grid(row = 1, column = 2, padx = 5, pady = 5)

def calculate():
    x = int(costBox.get())
    y = int(qtyBox.get())
    totalBox.delete(0, END)
    totalBox.insert(0, f"{x*y: .2f} 元") 

buttonEnter = Button(root, text = "确定", padx = 40, pady = 20, command = lambda: calculate())
buttonEnter.grid(row = 2, column = 2, padx = 5, pady = 5)

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-10 19:19:24 | 显示全部楼层
小程序的话,也简单,循环调用自动计算就行了,如:
from tkinter import *

root = Tk()
costLabel = Label(root, text = "成本").grid(row = 0, column = 0)
qtyLabel = Label(root, text = "数量").grid(row = 0, column = 1)
totalLabel = Label(root, text = "总价").grid(row = 0, column = 2)

costBox = Entry(root, borderwidth = 2)
costBox.grid(row = 1, column = 0, padx = 5, pady = 5)

qtyBox = Entry(root, borderwidth = 2)
qtyBox.grid(row = 1, column = 1, padx = 5, pady = 5)

totalBox = Entry(root,  borderwidth = 2)
totalBox.grid(row = 1, column = 2, padx = 5, pady = 5)

def auto_calculate():
    x = int(costBox.get()) if costBox.get() != '' else 0
    y = int(qtyBox.get()) if qtyBox.get() != '' else 0
    totalBox.delete(0, END)
    totalBox.insert(0, f"{x*y: .2f} 元") 

    root.after(500, auto_calculate)  # 每500毫秒进行自动计算
    # 注:小程序可以就这样就行了。较大程序需要另外的处理。

auto_calculate()

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-10 20:36:08 | 显示全部楼层
阿奇_o 发表于 2021-12-10 19:19
小程序的话,也简单,循环调用自动计算就行了,如:


我要做一个21行的类似的表,要从数据库mysql中调数据,并且展示的页面也要用到运算.
这个能帮我解答一些思路吗?付-费-都可以。
我见您以前也回答过我的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-10 22:21:31 | 显示全部楼层
dishan 发表于 2021-12-10 20:36
我要做一个21行的类似的表,要从数据库mysql中调数据,并且展示的页面也要用到运算.
这个能帮我解答一 ...

可以加我Q:3130137034
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表