You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python Tkinter日历代码出现空字符串转int的ValueError报错如何解决

问题修复方案

你遇到的报错核心有两个触发原因,同时原代码还存在多处语法错误,按以下步骤修改即可:

1 优先解决直接触发报错的按钮绑定错误

原代码中按钮定义的command=showCalender()写法错误,加括号会在按钮初始化时就立刻执行showCalender函数,此时用户还没输入年份,输入框是空的,自然触发空字符串转int的报错。
修改为传函数名本身即可:

button = Button(new, text='Show Calender', fg='Black', bg='Blue', command=showCalender)

2 修复其他语法错误

  • 删除首行多余的错误导入语句import calendar module
  • 删除无效调用行year_field(row=2, column=1)
  • 补充缺失的退出按钮定义,删掉原来不存在的Exit控件布局代码

3 补充输入合法性校验,避免后续用户输入异常

给showCalender函数加空值、非数字输入的校验,异常时弹出提示:

from tkinter import messagebox

def showCalender():
    year_input = year_field.get().strip()
    # 空值校验
    if not year_input:
        messagebox.showerror("输入错误", "请输入年份")
        return
    # 数字格式校验
    try:
        year = int(year_input)
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法的数字年份")
        return
    # 年份范围校验
    if year <= 0:
        messagebox.showerror("输入错误", "年份必须大于0")
        return
    # 原有日历展示逻辑不变
    gui = Tk()
    gui.config(background='grey')
    gui.title("Calender for the year")
    gui.geometry("550x600")
    gui_content= calendar.calendar(year)
    calYear = Label(gui, text= gui_content, font= "Consolas 10 bold")
    calYear.grid(row=5, column=1,padx=20)
    gui.mainloop()

完整修复后代码

import calendar
from tkinter import *
from tkinter import messagebox

# 展示指定年份日历的函数
def showCalender():
    year_input = year_field.get().strip()
    # 空值校验
    if not year_input:
        messagebox.showerror("输入错误", "请输入年份")
        return
    # 数字格式校验
    try:
        year = int(year_input)
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法的数字年份")
        return
    # 年份范围校验
    if year <= 0:
        messagebox.showerror("输入错误", "年份必须大于0")
        return
    gui = Tk()
    gui.config(background='grey')
    gui.title("年度日历")
    gui.geometry("550x600")
    gui_content= calendar.calendar(year)
    calYear = Label(gui, text= gui_content, font= "Consolas 10 bold")
    calYear.grid(row=5, column=1,padx=20)
    gui.mainloop()
    
# 主程序
if __name__=='__main__':
    new= Tk()
    new.config(background="grey")
    new.title("日历")
    new.geometry("250x140")
    cal= Label(new, text="日历", bg='grey', font=("times", 28, "bold"))
    
    # 输入年份提示标签
    year= Label(new, text="请输入年份", bg= 'dark grey')
    
    # 年份输入框
    year_field =Entry(new)
    button = Button(new, text='显示日历', fg='Black', bg='Blue', command=showCalender)
    Exit = Button(new, text='退出', command=new.destroy)
    # 控件布局调整
    cal.grid(row=1, column=1)
    year.grid(row=2, column=1)
    year_field.grid(row=3, column=1)
    button.grid(row=4, column=1)
    Exit.grid(row=6, column=1)
    new.mainloop()

内容的提问来源于stack exchange,提问作者Bitu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:24:06