问题&原因:
python tkinter编程中,在使用StringVar定义变量,想要此变量参与计算,直接获取此值后int转为整形,如果输入框内容未赋值,结果会提示:
invalid literal for int() with base 10: ‘‘
注意int()函数无法将’’(空值)转换为10进制
import tkinter as tk
def compute(event):
'''将输入框的值参与计算,输出到Label中'''
print(data.get())
num = int(data.get())
result = num*10
txt.config(text=result)
root=tk.Tk()
data=tk.StringVar() #定义变量data,默认是空值,用于标记输入框内的文本内容
e=tk.Entry(root,textvariable=data)
e.bind('<Return>',compute) #回车后响应事件
e.pack()
result=int(data.get()) #此处会报错,因为当前的data.get()值为空的
txt= tk.Label(root,text=result)
txt.pack()
root.mainloop()
解决方案:
保证int()函数里的变量值不为空,可在前面加print()检查
修改如下,将计算过程写到函数compute中,删除初始化txt值的显示语句、同时注意输入框值不能为空,
import tkinter as tk
def compute(event):
'''将输入框的值参与计算,输出到Label中'''
#print(data.get())
#判断输入是否为空,如果是的话,提示输入数字。
data_get=data.get()
if data_get=='':
txt.config(text='请输入数字')
else:
num = int(data.get())
result = num*10
txt.config(text=result)
root=tk.Tk()
data=tk.StringVar() #定义变量data,默认是空值,用于标记输入框内的文本内容
e=tk.Entry(root,textvariable=data)
e.bind('<Return>',compute) #回车后响应事件
e.pack()
txt= tk.Label(root)
txt.pack()
root.mainloop()
总结
注意两点:
1)可以在int()前加一个print,看一下变量的值
2)有些变量不设置值时默认是空,注意此变量是否在参与计算前赋过值
版权声明:本文为u010234441原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。