鱼C论坛

 找回密码
 立即注册
查看: 1403|回复: 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()

小甲鱼最新课程 -> https://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()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-10 18:31:59 | 显示全部楼层
为什么不加多一个按钮?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

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

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

  19. root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

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

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

  19. auto_calculate()

  20. root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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

可以加我Q:3130137034
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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