问题&原因:

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 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u010234441/article/details/112176649